Get the cartesian product of a series of lists?
Become part of the top 3% of the developers by applying to Toptal https://topt.al/25cXVn
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping
--
Chapters
00:00 Question
00:55 Accepted answer (Score 586)
01:18 Answer 2 (Score 121)
01:32 Answer 3 (Score 45)
02:11 Answer 4 (Score 39)
02:27 Thank you
--
Full question
https://stackoverflow.com/questions/5339...
Question links:
[Avoiding nested for loops]: https://stackoverflow.com/questions/1117...
[Operation on every pair of element in a list]: https://stackoverflow.com/questions/9425...
[Generating permutations with repetitions]: https://stackoverflow.com/questions/3099...
Accepted answer links:
[itertools.product]: https://docs.python.org/3/library/iterto...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #list #cartesianproduct
#avk47
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game Looping
--
Chapters
00:00 Question
00:55 Accepted answer (Score 586)
01:18 Answer 2 (Score 121)
01:32 Answer 3 (Score 45)
02:11 Answer 4 (Score 39)
02:27 Thank you
--
Full question
https://stackoverflow.com/questions/5339...
Question links:
[Avoiding nested for loops]: https://stackoverflow.com/questions/1117...
[Operation on every pair of element in a list]: https://stackoverflow.com/questions/9425...
[Generating permutations with repetitions]: https://stackoverflow.com/questions/3099...
Accepted answer links:
[itertools.product]: https://docs.python.org/3/library/iterto...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #list #cartesianproduct
#avk47
ACCEPTED ANSWER
Score 657
Use itertools.product, which has been available since Python 2.6.
import itertools
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
for element in itertools.product(*somelists):
print(element)
This is the same as:
for element in itertools.product([1, 2, 3], ['a', 'b'], [4, 5]):
print(element)
ANSWER 2
Score 126
import itertools
>>> for i in itertools.product([1,2,3],['a','b'],[4,5]):
... print i
...
(1, 'a', 4)
(1, 'a', 5)
(1, 'b', 4)
(1, 'b', 5)
(2, 'a', 4)
(2, 'a', 5)
(2, 'b', 4)
(2, 'b', 5)
(3, 'a', 4)
(3, 'a', 5)
(3, 'b', 4)
(3, 'b', 5)
>>>
ANSWER 3
Score 45
For Python 2.5 and older:
>>> [(a, b, c) for a in [1,2,3] for b in ['a','b'] for c in [4,5]]
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4),
(2, 'a', 5), (2, 'b', 4), (2, 'b', 5), (3, 'a', 4), (3, 'a', 5),
(3, 'b', 4), (3, 'b', 5)]
Here's a recursive version of product() (just an illustration):
def product(*args):
if not args:
return iter(((),)) # yield tuple()
return (items + (item,)
for items in product(*args[:-1]) for item in args[-1])
Example:
>>> list(product([1,2,3], ['a','b'], [4,5]))
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4),
(2, 'a', 5), (2, 'b', 4), (2, 'b', 5), (3, 'a', 4), (3, 'a', 5),
(3, 'b', 4), (3, 'b', 5)]
>>> list(product([1,2,3]))
[(1,), (2,), (3,)]
>>> list(product([]))
[]
>>> list(product())
[()]
ANSWER 4
Score 36
With itertools.product:
import itertools
result = list(itertools.product(*somelists))