1.3. Les listes

# Afficher la table des matières

from jyquickhelper import add_notebook_menu
add_notebook_menu()
run previous cell, wait for 2 seconds

Les listes sont très semblables aux chaînes, sauf que chaque élément peut être de n’importe quel type. La syntaxe pour créer des listes en Python est […]:

- Collection ordonnée (de gauche à droite) d’éléments (combinaison de types de données de base,  données hétérogènes)
- De taille quelconque, peut grandir, rétrécir, être modifiée, être encapsulée (liste de listes de listes)
l = [1,2,3,4]

print(type(l))
print(l)
<class 'list'>
[1, 2, 3, 4]

Les éléments d’une liste peuvent ne pas être du même type :

l = [1, 'a', 1.0, 1-1j]

print(l)
[1, 'a', 1.0, (1-1j)]

Les listes Python peuvent être non-homogènes et arbitrairement imbriquées:

l1 = [1, [2, [3, [4, [5]]]]]

l1
[1, [2, [3, [4, [5]]]]]

1.3.1. Slicing

Les mêmes techniques de slicing utilisées précédement sur les chaînes de caractères peuvent également être utilisées pour manipuler les listes.

L=[ '14 ' ,'14231363 ' ,'14232541 ', 'MC1R ']
L[3]
'MC1R '
L[0:2]
['14 ', '14231363 ']
print(L[::3])
['14 ', 'MC1R ']

1.3.2. Manipulation de listes

On peut modifier les listes en attribuant de nouvelles valeurs aux éléments de la liste. Dans le jargon technique, on dit que les listes sont mutables.

L [3]= ' ENSOARG00000002239 ' # une liste est modifiable
L
['14 ', '14231363 ', '14232541 ', ' ENSOARG00000002239 ']
L [1]= int(L[1]) ; L[2]= int(L[2]) # conversion string -> integer
L # les elements sont de types differents
['14 ', 14231363, 14232541, ' ENSOARG00000002239 ']

Il existe un certain nombre de fonctions pratiques pour générer des listes de différents types. Exemple :

# Sous Python 3.x, on peut générer une liste en utilisant l'instruction suivante : List (range (start, stop, step)

list(range(1, 20, 6))   
[1, 7, 13, 19]
# Convertir une chaîne en une liste  :
s = "Bonjour"
s2=list(s)
s2
['B', 'o', 'n', 'j', 'o', 'u', 'r']

1.3.3. Fonctions/Opérations sur les listes

  • ajoute un élément à la fin de la liste avec append

List =[3 , 2, 4, 1]
List.append(15)   # ajoute un élément à la fin de la liste  avec append
print(List)
[3, 2, 4, 1, 15]
  • étendre une liste avec extend

List.extend ([7 , 8, 9])  # étendre la liste  avec extend
print(List)
[3, 2, 4, 1, 15, 7, 8, 9]
  • Insérer un élément à une position spécifique à l’aide de insert

List.insert(0, 111)
print(List)
[111, 3, 2, 4, 1, 15, 7, 8, 9]
  • Supprimer le premier élément correspondant à la valeur donnée à l’aide de remove

List.remove(15)
print(List)
[111, 3, 2, 4, 1, 7, 8, 9]
  • Supprimer un élément à un emplacement donné à l’aide de del

del List [3] # supprimer l'élément se trouvant à l'index 3 de la liste
print(List)
[111, 3, 2, 1, 7, 8, 9]
  • Tri d’une liste avec sort

List.sort () # Tri de liste
List
[1, 2, 3, 7, 8, 9, 111]
  • Renoyer le nombre d’occurence d’une valeur dans la liste avec count

List.count (3)   # renvoie le nombre d'occurence de 3 dans la liste
1

Voir help(list) pour plus de détails, ou lire la documentation en ligne.

1.3.4. Bonnes pratiques

1.3.4.1. Arrêter d’untiliser = operator pour faire une copie de liste Python. Utilisze plutôt la méthode “copy”

Lorsque vous créez une copie d’une liste Python à l’aide de l’opérateur =, une modification de la nouvelle liste entraînera celle de l’ancienne. C’est parce que les deux listes pointent vers le même objet.

liste_1 = [1, 2, 3]
liste_2 = liste_1 
liste_2.append(4)
liste_2
[1, 2, 3, 4]
liste_1
[1, 2, 3, 4]

Au lieu d’utiliser l’opérateur =, utilisez la méthode copy(). Maintenant, votre ancienne liste ne changera pas lorsque vous modifierez votre nouvelle liste.

liste_1 = [1, 2, 3]
liste_2 = liste_1.copy()
liste_2.append(4)
liste_2
[1, 2, 3, 4]
liste_1
[1, 2, 3]

1.3.4.2. Enumerate : Obtenir le compteur et la valeur en bouclant

Généralement pour accéder à la fois à l’index et à la valeur d’un tableau (liste), on a souvent tendance à utiliser : for i in range(len(tableau)).

Si c’est le cas, utilisez plutôt enumerate. Le résultat est le même, mais il est beaucoup plus propre.

Tableau = ['a', 'b', 'c', 'd', 'e']

# Au lieu de
for i in range(len(Tableau)):
    print(i, Tableau[i])
0 a
1 b
2 c
3 d
4 e
# Utilisez ça
for i, val in enumerate(Tableau):
    print(i, val)
0 a
1 b
2 c
3 d
4 e

1.3.4.3. Différence entre “append” et “extend”

Pour ajouter une liste à une autre liste, utilisez la méthode append. Pour ajouter des éléments d’une liste à une autre liste, utilisez la méthode extend.

# Ajouter une liste à une liste
a = [1, 2, 3, 4]
a.append([5, 6])
a
[1, 2, 3, 4, [5, 6]]
# Ajouter des éléments à une liste
a = [1, 2, 3, 4]
a.extend([5, 6])

a
[1, 2, 3, 4, 5, 6]