web-dev-qa-db-fra.com

Itérer sur toutes les combinaisons de valeurs dans plusieurs listes dans Python

Compte tenu de plusieurs listes de longueurs éventuellement variables, je souhaite parcourir toutes les combinaisons de valeurs, un élément de chaque liste. Par exemple:

first = [1, 5, 8]
second = [0.5, 4]

Ensuite, je veux que la sortie de soit:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]

Je veux parcourir la liste combinée. Comment dois-je procéder?

39
DurgaDatta

itertools.product devrait faire l'affaire.

>>> list(itertools.product([1, 5, 8], [0.5, 4]))
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]

Notez que itertools.product renvoie un itérateur, vous n'avez donc pas besoin de le convertir en liste si vous ne devez l'itérer qu'une seule fois.

par exemple.

for x in itertools.product([1, 5, 8], [0.5, 4]):
    # do stuff
72
Volatility

Cela peut être réalisé sans aucune importation en utilisant un compréhension de la liste . En utilisant votre exemple:

first = [1, 5, 8]
second = [0.5, 4]

combined = [(f,s) for f in first for s in second]

print(combined)
# [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)]
6
spinup