![](/img/trans.png)
[英]How to iterate through the Cartesian product of ten lists (ten elements each) faster? (Probability and Dice)
[英]How to iterate in a cartesian product of lists
我想使用3个(或任意数量的)带有任意数量元素的列表在for循环中进行迭代,例如:
from itertools import izip
for x in izip(["AAA", "BBB", "CCC"], ["M", "Q", "S", "K", "B"], ["00:00", "01:00", "02:00", "03:00"]):
print x
但这给了我:
('AAA', 'M', '00:00')
('BBB', 'Q', '01:00')
('CCC', 'S', '02:00')
我想要:
('AAA', 'M', '00:00')
('AAA', 'M', '01:00')
('AAA', 'M', '02:00')
.
.
('CCC', 'B', '03:00')
其实我想要这个:
for word, letter, hours in [cartesian product of 3 lists above]
if myfunction(word,letter,hours):
var_word_letter_hours += 1
您要使用列表的产品 :
from itertools import product
for word, letter, hours in product(["AAA", "BBB", "CCC"], ["M", "Q", "S", "K", "B"], ["00:00", "01:00", "02:00", "03:00"]):
演示:
>>> from itertools import product
>>> for word, letter, hours in product(["AAA", "BBB", "CCC"], ["M", "Q", "S", "K", "B"], ["00:00", "01:00", "02:00", "03:00"]):
... print word, letter, hours
...
AAA M 00:00
AAA M 01:00
AAA M 02:00
AAA M 03:00
...
CCC B 00:00
CCC B 01:00
CCC B 02:00
CCC B 03:00
使用itertools.product
:
import itertools
for x in itertools.product(["AAA", "BBB", "CCC"],
["M", "Q", "S", "K", "B"],
["00:00", "01:00", "02:00", "03:00"]):
print x
输出:
('AAA', 'M', '00:00')
('AAA', 'M', '01:00')
...
('CCC', 'B', '02:00')
('CCC', 'B', '03:00')
仅作记录,另一个解决方案只是嵌套for
循环中:
for a in ["AAA", "BBB", "CCC"]:
for b in ["M", "Q", "S", "K", "B"]:
for c in ["00:00", "01:00", "02:00", "03:00"]:
x = (a, b, c)
# Use x ...
在我看来,这比必须找出/记住itertools.product
函数的功能要清晰得多。 使用它的唯一好的理由是,如果您处于更抽象的情况下; 例如,您需要将迭代器传递给函数,而不是立即对其进行迭代,或者如果您要使用其笛卡尔积的任意列表列表(在这种情况下,可以使用product(*lists)
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.