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

Étant donné plusieurs listes de longueur éventuellement variable, je veux itérer sur toutes les combinaisons de valeurs, un élément de chaque liste. Par exemple:

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

Alors 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 listecombinée . Comment puis-je obtenir ce fait?

29
demandé sur Martin Thoma 2013-05-05 15:36:55

2 réponses

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 n'allez l'itérer qu'une seule fois.

Par exemple.

for x in itertools.product([1, 5, 8], [0.5, 4]):
    # do stuff
59
répondu Volatility 2013-05-05 11:40:41

Ceci peut être réalisé sans aucune importation en utilisant une compréhension de 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)]
2
répondu spinup 2018-04-28 01:42:54