Les listes

On a déja présenter ce qu’était une liste dans le cours sur les objets. Il s’agit d’un outil puissant pour stocker plusieurs types de données. On utilise les crochets pour définir une liste

[19]:
l = [1,2,3]
l
[19]:
[1, 2, 3]
[21]:
l = list([1,2,3])
l
[21]:
[1, 2, 3]

On peut aussi utiliser les iterateurs pour la peupler

[39]:
l = [i for i in range(1,4)]
l
[39]:
[1, 2, 3]

Comme nous le verrons, il est souvent plus utile de mettre les listes de nombres dans un array numpy. Plusieurs opérations sont alors sérialisés. Pour faire une opération sur une liste avec des nombres, il faut utiliser un itérateur

[40]:
l =  [i**2 for i in l]
l
[40]:
[1, 4, 9]

Les listes sont très utiles pour automatiser la production de strings consécutives. Par exemple, s’il y a 15 paramètres et que je peux les nommer par_x ou x est l’indice, alors on peut faire:

[3]:
labels = ['par_'+str(s) for s in range(1,16)]
labels
[3]:
['par_1',
 'par_2',
 'par_3',
 'par_4',
 'par_5',
 'par_6',
 'par_7',
 'par_8',
 'par_9',
 'par_10',
 'par_11',
 'par_12',
 'par_13',
 'par_14',
 'par_15']

Les méthodes

Plusieurs méthodes sont applicables aux listes directement. Par exemple, on peut faire un tri (ascendant ou non):

[41]:
l.sort(reverse=True)
l
[41]:
[9, 4, 1]

On peut aussi enlever des éléments ou en enlever

[42]:
l.remove(4)
l
[42]:
[9, 1]
[48]:
l.insert(1,4)
l
[48]:
[0, 4, 1, 2]
[50]:
l = []
for i in range(1,4):
    l.append(i)
l
[50]:
[1, 2, 3]

Liste de listes

On peut faire des listes de liste

[44]:
l1 = [1,2,3]
l2 = [4,5,6]
l = [l1,l2]
l
[44]:
[[1, 2, 3], [4, 5, 6]]

On peut les applatir pour avoir une seule liste jointe en utilisant

[46]:
[i for li in l for i in li]
[46]:
[1, 2, 3, 4, 5, 6]

Le module itertools

Ce module permet de faire plusieurs opérations intéressantes avec les listes

[10]:
from itertools import chain,product
[17]:
l1 = [1,2,3]
l2 = [4,5,6]
l = [l1,l2]
l
[17]:
[[1, 2, 3], [4, 5, 6]]
[18]:
l = list(chain(*l))
l
[18]:
[1, 2, 3, 4, 5, 6]

Supposons qu’on a deux listes, l’une contenant des noms de viandes et l’autre des légumes. Si on veut créer une liste contenant toutes les combinaisons on peut faire

[23]:
meats = ['beef','chicken']
veggies = ['brocoli','carrots']
data = [meats,veggies]
combinations = list(product(*data))
combinations
[23]:
[('beef', 'brocoli'),
 ('beef', 'carrots'),
 ('chicken', 'brocoli'),
 ('chicken', 'carrots')]
[24]:
menu = [s[0]+' with '+s[1] for s in combinations]
menu
[24]:
['beef with brocoli',
 'beef with carrots',
 'chicken with brocoli',
 'chicken with carrots']