Python >> Tutoriel Python >  >> Python

Comment créer une liste Python ?

Listes de définitions :Une liste Python est une séquence ordonnée d'objets Python arbitraires. C'est un objet mutable en lui-même donc, contrairement aux ensembles Python, vous pouvez modifier une liste Python.

Dans cet article, vous apprendrez tout ce que vous devez savoir sur comment créer des listes Python .

Présentation – Création d'une liste en Python

Il existe de nombreuses façons de créer une liste en Python. Voyons un aperçu rapide dans le tableau suivant :

Code Description
[] Crochet :Initialise une liste vide avec zéro élément. Vous pouvez ajouter des éléments ultérieurement.
[x1, x2, x3, … ] Affichage de la liste : Initialise une liste vide avec les éléments x1 , x2 , x3 , … Par exemple, [1, 2, 3] crée une liste avec trois entiers 1, 2 et 3.
[expr1, expr2, ... ] Affichage de liste avec des expressions :Initialise une liste avec le résultat des expressions expr1 , expr2 , … Par exemple, [1+1, 2-1] crée la liste [2, 1] .
[expr for var in iter] Compréhension de la liste :applique l'expression expr à chaque élément d'un itérable.
list(iterable) Constructeur de liste qui prend un itérable en entrée et renvoie une nouvelle liste.
[x1, x2, ...] * n Multiplication de liste crée une liste de n concaténations de l'objet liste. Par exemple [1, 2] * 2 == [1, 2, 1, 2] .

Vous pouvez jouer avec quelques exemples dans notre shell Python interactif :

Exercice  :Utilisez la compréhension de liste pour créer une liste de nombres carrés.

Plongeons-nous dans des méthodes plus spécifiques pour créer diverses formes de listes en Python.

CI-DESSOUS, JE VOUS DONNE UNE ACHEMINEMENT PDF DES MÉTHODES DE LISTE PYTHON LES PLUS IMPORTANTES. Alors continuez à lire !

Python Créer une liste de taille

Problème :Soit un entier n . Comment initialiser une liste avec n éléments d'espace réservé ?

# n=0 --> []
# n=1 --> [None]
# n=5 --> [None, None, None, None, None]

Solution :Utilise l'opération de concaténation de liste * .

n = 5
lst = [None] * n
print(lst)
# [None, None, None, None, None]

Vous pouvez modifier l'élément n comme vous voulez. Pour une discussion détaillée sur ce sujet, veuillez visiter mon tutoriel de blog sur Comment créer une liste avec une taille spécifique n ? Le didacticiel contient également de nombreuses visualisations pour vous apprendre les tenants et aboutissants de cette méthode (et vous propose des alternatives puissantes).

Python crée une liste de chaînes

Vous pouvez utiliser la méthode précédente pour créer une liste de n chaînes :

n = 3
lst = ['xyz'] * n
print(lst)
# ['xyz', 'xyz', 'xyz']

Mais voulez-vous créer une liste de numéros ?

Créer une liste de nombres en Python

Remplacez simplement les chaînes par défaut par les nombres par défaut :

n = 3
lst = [1] * n
print(lst)
# [1, 1, 1]

Un cas particulier est le nombre :

Python crée une liste de zéros

Cela crée une liste de zéros :

n = 3
lst = [0] * n
print(lst)
# [0, 0, 0]

Mais que se passe-t-il si vous souhaitez créer une liste de nombres consécutifs 0, 1, 2, … ?

Python Créer une liste à partir d'une plage

Pour créer une liste de numéros consécutifs à partir de x à y , utilisez le range(x, y) fonction Python intégrée. Cela ne renvoie qu'un range objet qui est un itérable. Mais vous pouvez convertir l'itérable en une liste en utilisant le list(...) constructeur :

print(list(range(2, 4)))
# [2, 3]

print(list(range(2, 6)))
# [2, 3, 4, 5]

print(list(range(2, 10, 2)))
# [2, 4, 6, 8]

Vous pouvez voir que le deuxième argument (le stop index) n'est pas inclus dans la séquence de plages. Le troisième argument du range(start, stop, step) function est la taille de pas facultative qui vous permet de sauter step nombres de la série de nombres continus.

Python Créer une liste de 0 à 100

Une situation particulière se présente si vous souhaitez créer une liste de 0 à 100 (inclus). Dans ce cas, vous utilisez simplement le list(range(0, 101)) appel de fonction. Comme stop argument, vous utilisez le nombre 101 car il est exclu de la série finale.

print(list(range(0, 101)))
# [0, 1, ..., 100]

print(list(range(101)))
# [0, 1, ..., 100]

Il n'est en fait pas nécessaire de donner l'index de départ par défaut 0, vous pouvez donc simplement l'ignorer.

Python Créer une liste avec une boucle For

Pour créer une liste avec une boucle for, vous initialisez d'abord la liste vide, puis ajoutez ensuite un élément à la liste :

lst = []
for x in range(10):
    # Append any initial element here:
    lst.append(x)

print(lst)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Vous pouvez en savoir plus sur la boucle for sur une seule ligne dans cet article.

Python Créer une liste de listes

Cependant, il y a un petit problème si vous voulez créer une liste avec des objets modifiables (comme une liste de listes) :

lst = [[]] * n
print(lst)
# [[], [], [], [], []]

lst[2].append(42)

print(lst)
# [[42], [42], [42], [42], [42]]

La modification d'un élément de liste modifie tous les éléments de liste car tous les éléments de liste font référence au même objet de liste en mémoire :

La solution consiste à utiliser la compréhension de liste (voir mon tutoriel de blog détaillé sur la compréhension de liste pour un guide complet) :

lst = [[] for _ in range(n)]
print(lst)
# [[], [], [], [], []]

lst[2].append(42)
print(lst)
# [[], [], [42], [], []]

Dans la visualisation suivante, vous pouvez voir comment chaque élément fait désormais référence à un objet de liste indépendant en mémoire :

Exercice :Lancez la visualisation et convainquez-vous qu'un seul élément est modifié ! Pourquoi est-ce le cas ?

Python crée une liste de tuples

Une approche similaire peut être utilisée pour créer une liste de tuples au lieu d'une liste de listes.

n = 5
lst = [() for _ in range(n)]
print(lst)

lst[2] = (1, 2, 3)
print(lst)

'''
[(), (), (), (), ()]
[(), (), (1, 2, 3), (), ()]
'''

Vous initialisez d'abord la liste avec des tuples vides. Les tuples sont immuables, vous ne pouvez donc pas les modifier. Mais vous pouvez écraser chaque élément de la liste avec un nouveau tuple comme vous l'avez fait dans l'exemple avec le troisième élément et le tuple (1, 2, 3) .

Python Créer une liste à espacement égal

Pour créer une liste équidistante, utilisez le np.linspace() fonction de la bibliothèque NumPy. Voici un petit tutoriel sur le sujet :

Commençons par un bref aperçu.

Examinons d'abord plus en détail les trois arguments les plus courants :start , stop et num . Voici ce que la documentation officielle de NumPy a à dire :

numpy.linspace(start, stop, num=50)

Renvoyer des nombres régulièrement espacés sur un intervalle spécifié. Renvoie nombre d'échantillons régulièrement espacés. Le point de terminaison de l'intervalle peut éventuellement être exclu.

Remarque :comme son nom l'indique, np.linspace renvoie des nombres qui sont espacés linéairement une part. Ainsi, ils sont tous à la même distance les uns des autres (pensez aux points sur une ligne).

De la définition, il s'ensuit que np.linspace(-3, 3) nous donnera 50 nombres régulièrement espacés dans l'intervalle [-3, 3] .
Vérifions cela avec du code.

Essayez vous-même  :Vous pouvez exécuter le code dans le shell en cliquant sur "Exécuter" !

Exercice :Pouvez-vous réduire le nombre d'échantillons à 10 ?

>>> A = np.linspace(-3, 3)

>>> type(A)
numpy.ndarray

# Number of elements in A
>>> len(A)
50

# First element of A
>>> A[0]
-3.0

# Last element of A
>>> A[-1]
3.0

# The difference between every value is the same: 0.12244898
>>> np.diff(A)
array([0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898, 0.12244898,
       0.12244898, 0.12244898, 0.12244898, 0.12244898])

Si nous ne voulons que 10 échantillons entre -3 et 3, nous définissons num=10 .

>>> B = np.linspace(-3, 3, num=10)

# B only contains 10 elements now
>>> len(B)
10

Mais que se passe-t-il si vous souhaitez initialiser votre liste avec des éléments aléatoires ?

Python crée une liste d'éléments aléatoires

Voulez-vous initialiser une liste avec des nombres aléatoires ? Ensuite, je vais vous montrer quatre manières différentes d'y parvenir, ainsi qu'une courte discussion sur "la manière la plus pythonique" .

Problème :Soit un entier n . Créer une liste de n éléments dans un certain intervalle (exemple intervalle :[0, 20] ).

# n = 5 --> [2, 3, 1, 4, 3]
# n = 3 --> [10, 12, 1]
# n = 10 --> [8, 2, 18, 10, 4, 19, 5, 9, 8, 1]

Solution  :Voici un bref aperçu de la façon dont vous pouvez créer une liste de nombres aléatoires :

  • Méthode 1 :[random.random() for _ in range(10)] pour créer une liste de flottants aléatoires.
  • Méthode 2 :[random.randint(0, 999) for _ in range(10)] pour créer une liste d'entiers aléatoires.
  • Méthode 3 :randlist = []; for _ in range(10): randlist.append(random.randint(0, 99)) pour créer une liste d'entiers aléatoires.
  • Méthode 4 :randlist = random.sample(range(20), 10) pour créer une liste d'entiers aléatoires.

Vous pouvez les essayer vous-même dans notre shell de code interactif :

Exercice :Modifiez l'intervalle de chaque méthode sur [0, ] et exécutez le code.

Python créer une liste de listes à partir d'un zip

Réponse courte :Par défaut, le zip() La fonction renvoie un objet zip de tuples. Pour obtenir une liste de listes en sortie, utilisez la déclaration de compréhension de liste [list(x) for x in zip(l1, l2)] qui convertit chaque tuple en une liste et stocke les listes converties dans un nouvel objet de liste imbriqué.

Les codeurs Python intermédiaires connaissent le zip() fonction. Mais si vous êtes comme moi, vous avez souvent maudit la sortie de la fonction zip :tout d'abord, c'est un objet zip (et non une liste), et, deuxièmement, les éléments zippés individuels sont des tuples. Mais que se passe-t-il si vous avez besoin d'une liste de listes en sortie ?

Problème :Soit un nombre de listes l1, l2, ... . Comment compresser les ièmes éléments de ces listes ensemble et obtenir une liste de listes ?

Exemple :Étant donné deux listes [1, 2, 3, 4] et ['Alice', 'Bob', 'Ann', 'Liz'] et vous voulez la liste des listes [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']] .

l1 = [1, 2, 3, 4]
l2 = ['Alice', 'Bob', 'Ann', 'Liz']
# ... calculate result ...
# Output: [[1, 'Alice'], [2, 'Bob'], [3, 'Ann'], [4, 'Liz']]

Voici un bref aperçu de nos solutions :

Exercice :Créer une nouvelle liste l3 et modifiez les quatre méthodes pour compresser les trois listes (au lieu de seulement deux).

Python Créer une liste a-z

Pour créer une liste avec tous les caractères 'a' , 'b' , …, 'z' , vous pouvez utiliser le list() constructeur sur le string.ascii_lowercase variables :

>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> list(string.ascii_lowercase)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

Le list() Le constructeur crée une nouvelle liste et place tous les éléments de l'itérable dans la nouvelle liste. Une chaîne est un itérable avec des éléments de caractère. Ainsi, le résultat est une liste de caractères minuscules.

Python Créer une liste de dictionnaires

Dites, vous avez un dictionnaire {0: 'Alice', 1: 'Bob'} et vous voulez créer une liste de dictionnaires avec des copies du dictionnaire original :[{0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}] .

d = {0: 'Alice', 1: 'Bob'}

dicts = [{**d} for _ in range(3)]
print(dicts)
# [{0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]

Vous utilisez la compréhension de liste avec une variable de boucle "jetable" trait de soulignement _ pour créer une liste de 3 éléments. Vous pouvez changer la valeur 3 si vous avez besoin de plus ou moins d'éléments dans votre liste.

L'expression {**d} décompresse toutes les paires (clé, valeur) du dictionnaire d'origine d dans un nouveau dictionnaire.

La liste résultante contient des copies du dictionnaire original. Si vous en modifiez un, les autres ne verront pas ce changement :

dicts[0][2] = 'Frank'
print(dicts)
# [{0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]

Seul le premier dictionnaire de la liste contient la nouvelle paire clé-valeur (2: 'Frank') ce qui prouve que les dictionnaires ne pointent pas sur le même objet en mémoire. Ce serait le cas si vous utilisiez la méthode suivante pour copier une liste avec un seul dictionnaire :

d2 = {0: 'Alice', 1: 'Bob'}

dicts2 = [d2] * 3
print(dicts2)
# [{0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]

La méthode semble correcte, mais les trois dictionnaires sont essentiellement les mêmes :

dicts2[0][2] = 'Frank'
print(dicts2)
# [{0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob', 2: 'Frank'}]

Si vous en changez un, vous changez tout.

Vous pouvez voir cet effet vous-même dans l'outil de visualisation de mémoire suivant :

Exercice :remplacez la méthode par la bonne pour que le changement n'affecte que le premier dictionnaire !

Python Créer une liste à partir de DataFrame

Pour créer une liste à partir d'un Pandas DataFrame, utilisez la méthode df.values.tolist() sur votre objet DataFrame df :

import pandas as pd

incomes = {'Name': ['Alice','Bob','Ann'],
           'Income': [2000, 3000, 9000]}

df = pd.DataFrame(incomes)

lst = df.values.tolist()
print(lst)
# [['Alice', 2000], ['Bob', 3000], ['Ann', 9000]]

Vous pouvez voir que la sortie est une liste de listes dans cet exemple. Si vous avez besoin d'améliorer vos compétences Pandas, consultez les plus belles feuilles de triche Python Pandas.

Créer une liste Python à partir d'un tableau NumPy

Pour convertir un tableau NumPy a à une liste, utilisez le a.tolist() méthode sur l'objet tableau. Si le tableau NumPy est multidimensionnel, une liste imbriquée est créée :

import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])

l = a.tolist()
print(l)
# [[1, 2, 3], [4, 5, 6]]

La liste résultante est une liste imbriquée de listes.

Python Créer une copie de liste

Étonnamment, même les codeurs Python avancés ne connaissent pas les détails du copy() méthode des listes Python. Il est temps de changer cela !

Définition et utilisation :Le list.copy() la méthode copie tous les list éléments dans une nouvelle liste. La nouvelle liste est la valeur de retour de la méthode. Il s'agit d'une copie superficielle :vous ne copiez que les références d'objet aux éléments de la liste et non les objets eux-mêmes.

Voici un court exemple :

>>> lst = [1, 2, 3]
>>> lst.copy()
[1, 2, 3]

Dans la première ligne, vous créez la liste lst composé de trois nombres entiers. Vous créez alors une nouvelle liste en copiant tous les éléments.

Casse-tête – Essayez-le vous-même :

Syntaxe :Vous pouvez appeler cette méthode sur chaque objet de liste en Python. Voici la syntaxe :

list.copy()

Arguments : La méthode ne prend aucun argument.

Valeur de retour : La méthode list.clear() renvoie un list objet en copiant les références à tous les objets de la liste d'origine.

Vidéo :

Articles associés :

  • Le guide ultime des listes Python

Voici votre aide-mémoire PDF gratuit vous montrant toutes les méthodes de liste Python sur une simple page. Cliquez sur l'image pour télécharger le fichier PDF haute résolution, imprimez-le et affichez-le sur le mur de votre bureau :

Téléchargement PDF instantané [100 % GRATUIT]

Vous pouvez en savoir plus sur le list.copy() méthode dans notre guide complet sur ce blog.

Python Créer une liste à partir de la carte

Problème :Étant donné un map objet. Comment créer une liste ?

La réponse est simple :utilisez le list() constructeur! Voici un exemple :

lst = [1, 2, 3]

m = map(str, lst)
print(m)
# <map object at 0x000001E71198B438>

l = list(m)
print(l)
# ['1', '2', '3']

La liste résultante est une liste de chaînes et contient tous les éléments de la carte itérable m .