Iteracja wszystkich kombinacji wartości w wielu listach w Pythonie

Biorąc pod uwagę wiele list o prawdopodobnie różnej długości, chcę iterować wszystkie kombinacje wartości, po jednym elemencie z każdej listy. Na przykład:

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

Następnie chcę, aby wynik był:

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

Chcę iterować nad połączoną listą. Jak to zrobić?

Author: Martin Thoma, 2013-05-05

2 answers

itertools.product powinno wystarczyć.

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

Zauważ, że itertools.product zwraca iterator, więc nie musisz przekonwertować go na Listę, jeśli zamierzasz wykonać iterację tylko raz.

Np.

for x in itertools.product([1, 5, 8], [0.5, 4]):
    # do stuff
 59
Author: Volatility,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-05 11:40:41

Można to osiągnąć bez importowania za pomocą rozumienia listy . Używając Twojego przykładu:

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
Author: spinup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-28 01:42:54