Itertools相当于嵌套循环"for x in xs:for y in ys ......"

Jam*_*ull 4 python nested-loops python-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]
Run Code Online (Sandbox Code Playgroud)

有没有办法减少嵌套,也许使用itertools

Jay*_*hik 17

for v, p, t in itertools.product(verbs, persons, tenses):
    ...
Run Code Online (Sandbox Code Playgroud)


Reu*_*ani 7

您可以用于itertools.product此任务:

输入可迭代对象的笛卡尔积。相当于生成器表达式中的嵌套 for 循环。例如,product(A, B) 返回与 ((x,y) for x in A for y in B) 相同的结果。

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

另一种选择是列表理解表达式:

for p in [(x,y,z) for x in a for y in b for z in c]:
    print(p)
Run Code Online (Sandbox Code Playgroud)