Un élément list
est une suite ordonnée d’éléments mutables (c’est à dire dont la valeur peut être modifiée).
l = [2,3]
print(l) # [2, 3]
print(l[0]) # 2
Il n’est pas possible d’assigner une valeur à un index qui n’existe pas (il faut utiliser une fonction append
ou insert
)
l[0] = 1 # Modifie la valeur de l'index 0
l[2] = 1 # IndexError: list assignment index out of range
Une liste peut contenir différents types.
l2 = [1,2,"Hello World",[3,4],(True,False)]
print(l2) # [1, 2, 'Hello World', [3, 4], (True, False)]
print(l2[3]) # [3, 4]
print(l2[3][0]) # 3
Les opérateurs disponibles sur les chaînes de caractères sont également disponibles sur les listes.
Get ([i])
l = ['H', 'e', 'l', 'l', 'o']
print(l[0]) # H
print(l[-1]) # o
Slice ([from:to])
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l[2:]) # [2, 3, 4, 5, 6, 7, 8, 9]
print(l[:5]) # [0, 1, 2, 3, 4]
print(l[2:5]) # [2, 3, 4]
print(l[::2]) # [0, 2, 4, 6, 8]
print(l[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(l[-5:-2]) # [5, 6, 7]
print(l[-2:-5:-1]) # [8, 7, 6]
list1 = [0, 3, 4, 1, 2]
list1[2:5] = [8, 9]
print(list1) # [0,3,8,9]
Set (=)]
On peut assigner une valeur donnée à un index donné mais on peut aussi remplacer un intervalle par un autre
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l[0] = 'z'
l[2:5] = ['a','b']
print(l) # ['z', 1, 'a', 'b', 5, 6, 7, 8, 9]
Concat (+)
print(['a', 'b', 'c'] + ['d', 'e', 'f']) # ['a', 'b', 'c', 'd', 'e', 'f']
Repeat (*)
print([1,2,3]*3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
Delete (del)
Le mot-clé del
permet de supprimer un ou plusieurs index
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del l[2]
print(l) # [0, 1, 3, 4, 5, 6, 7, 8, 9]
del l[:2]
print(l) # [3, 4, 5, 6, 7, 8, 9]
Appartenance (in, not in)
Vérifie si une valeur donnée est dans la liste
print(2 in [1,2,3]) # True
print("2" in [1,2,3]) # False
print("2" not in [1,2,3]) # True
Égalité (==)
Vérifie si deux listes contiennent les mêmes éléments, dans le même ordre
print([1,2,3] == [1,2,3]) # True
print([1,2,3] == [1,3,2]) # False
Les compréhensions de liste (list comprehensions) fournissent un moyen rapide de mapper et filtrer une liste. Syntaxe:
new_list = [expression(i) for i in old_list if filter(i)]
Exemples:
l1 = [10,20,30,40]
l2 = [x * 2 for x in l1]
print(l2) # [20, 40, 60, 80]
l1 = [10,15,20,25,30]
l2 = [x/2 for x in l1 if x%2==0]
print(l2) # [5.0, 10.0, 15.0]
Longueur
print(len([1,2,3])) # 3
Caster un autre type de donnée en liste
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']
print(list((1,2))) # [1, 2]
On peut utiliser la méthode split
pour séparer une chaîne de caractère selon un délimiteur donné
print("abc,def,ghi".split(','))
# ['abc', 'def', 'ghi']
Ou on peut effectuer un split avec un regex:
regex = r'-+'
text = "abc---def-ghi"
import re
print(re.split(regex, text))
# ['abc', 'def', 'ghi']
Vérifier si une variable est une liste
print(isinstance(l, list)) # True
Valider
# Au moins une des valeurs est vraie
print(any([0,0,0,1,0,0])) # True
print(any([0,0,0,0,0,0])) # False
# Toutes les valeurs sont vraies
print(all([1,1,1,0,1,1])) # False
print(all([1,1,1,1,1,1])) # True
Trier les éléments d’une liste
Retourne un nouveau tableau, le tableau d’origine reste tel que.
l = [27,6,78,215,1,36]
print(sorted(l)) # [1, 6, 27, 36, 78, 215]
Le paramètre key
peut prendre une fonction lambda en entrée.
Cette fonction doit retourner la ou les valeurs à utiliser pour le tri.
sorted_by_key = sorted([
{'name': 'Bina', 'age': 30},
{'name':'Andy', 'age': 18},
{'name': 'Zoey', 'age': 55}
],
key=lambda el: (el['name'])
)
l = [
('bob', 2),
('alice', 2),
('charlie', 1),
]
print(sorted(l, key=lambda x: (x[1], x[0])))
# [('charlie', 1), ('alice', 2), ('bob', 2)]
from functools import cmp_to_key
def sort_records(a, b):
# If same source: preserve order
if type(a) == type(b):
return 0
# Between different entities: ascending order
date_a = a["date"]
date_b = b["date"]
if date_a < date_b:
return -1
if date_b > date_a:
return 1
return 0
sorted(values, key=cmp_to_key(sort_records))
@cmp_to_key
def sort_excel(col1, col2):
"""
Usage: sorted(columns, key=sort_excel)
to sort in this order: A,B,AA,BB
"""
if len(col1) < len(col2): return -1 # noqa
if len(col1) > len(col2): return 1 # noqa
return -1 if col1 < col2 else 1
def test_sort_excel(self):
columns = ['AK', 'CF', 'J', 'A', 'CG', 'BW']
res = sorted(columns, key=functions.sort_excel)
self.assertEqual(res, ['A', 'J', 'AK', 'BW', 'CF', 'CG'])
from operator import attrgetter
objects.sort(key=attrgetter("email_sort_order"))
Récupérer la valeur maximale/minimale
l = [1,2,3]
print(min(l)) # 1
print(max(l)) # 3
print(sum(l)) # 6
Mapper les éléments d’une liste (passer d’une valeur à l’autre grâce à une fonction de callback)
# Avec map
l = map(lambda x: x*x, [1,2,3,4,5])
print(list(l)) # [1,4,9,16,25]
# Avec une compréhension de liste
l = [x*x for x in [1,2,3,4,5]]
print(l) # [1, 4, 9, 16, 25]
Filtrer les éléments d’une liste
# Avec filter
l = filter(lambda x: x%2==0, [1,2,3,4])
print(list(l)) # [2, 4]
# Avec une compréhension de liste
l = [x for x in [1,2,3,4] if x%2==0]
print(l) # [2, 4]
Aggréger les valeurs d’une liste en une seule valeur
from functools import reduce
x = reduce(lambda a,b: a+b, [1,2,3,4])
print(x) # 10
l1 = [12, 24, 35, 24, 88, 120, 155, 88, 120, 155]
# Removing duplicates
l2 = reduce(lambda l,item: l if item in l else l + [item], l1, [])
print(l2) # [12, 24, 35, 88, 120, 155]
Insérer
# Insérer à la fin
l.append(4)
print(l) # [1, 3, 4]
# Insérer à l'index donné
l.insert(1,2)
print(l) # [1, 2, 3, 4]
Concaténer
Pour concaténer, on peut utiliser +
(retourne un nouveau tableau) ou la fonction extend
(modifie le tableau original)
l = [1,2,3]
print(l.extend([4,5,6])) # None
print(l) # [1, 2, 3, 4, 5, 6]
Supprimer une valeur donnée (la première occurence)
Une erreur ValueError est levée si la valeur n’est pas dans la liste
l = ["a", "b", "a"]
print(l.remove("a")) # None ou ValueError if not found
print(l) # ['b', 'a']
Supprimer la valeur à un index donné.
pop
retourne la valeur de cet élément
l = [1,2,3]
print(l.pop(1)) # 2
print(l) # [1, 3]
Si aucun index n’est passé à pop
, la dernière valeur du tableau est supprimée.
l = [1,2,3]
print(l.pop()) # 3
print(l) # [1, 2]
Localiser
l = [1,2,3]
print(l.index(2)) # 1
print(l.index('z')) # ValueError: 'z' is not in list
Trier
sorted(l)
retourne un nouveau tableau l.sort()
tri le tableau d’origine.
l = [
('bob', 2),
('alice', 2),
('charlie', 1),
]
print(l.sort(key=lambda x: (x[1], x[0]))) # None
print(l) # [('charlie', 1), ('alice', 2), ('bob', 2)]
Inverser l’ordre des valeurs
l = [1,2,3]
print(l.reverse()) # None
print(l) # [3, 2, 1]
Zip/unzip
list(zip([1,2,3], [4,5,6])) # [(1, 4), (2, 5), (3, 6)]
z = [(1, 2), (3, 4), (5, 6), (7, 8)] # Some output of zip() function
unzip = lambda z: list(zip(*z))
unzip(z)