Itertools相当于嵌套循环"对于xs中的x:对于y中的y ..."

时间:2014-03-18 07:38:50

标签: python nested-loops itertools

我有一个嵌套循环来创建一组共轭动词中的所有组合。旨在获得动词,人和时态的所有可能组合,例如[['to be', 'first person singular', 'future'],['to be', 'second person singular', 'future'], ...]

for v in verbs:
    for p in persons:
        for t in tenses:
            return [v, p, t]

是否有办法减少嵌套,可能使用itertools

2 个答案:

答案 0 :(得分:13)

for v, p, t in itertools.product(verbs, persons, tenses):
    ...

答案 1 :(得分:2)

您可以使用itertools.product执行此任务:

  

输入可迭代的笛卡尔积。等效于生成器表达式中的嵌套for循环。例如,对于B中的y,乘积(A,B)的返回值与(x中的x的(x,y)相同)。

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
import itertools
for p in itertools.product(a,b,c):
    print(p)

替代方案是列表理解表达式:

for p in [(x,y,z) for x in a for y in b for z in c]:
    print(p)