itertools中嵌套循环"对于x在xs中: 对于y在ys中..."的等价写法
我有一个嵌套循环,用来生成一组动词的所有组合。我的目标是得到动词、人称和时态的所有可能组合,比如 [['to be', '第一人称单数', '将来时'], ['to be', '第二人称单数', '将来时'], ...]
。
for v in verbs:
for p in persons:
for t in tenses:
return [v, p, t]
有没有办法减少这个嵌套的层数,可能可以用 itertools
来实现?
2 个回答
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)
另外一种方法是使用列表推导式:
for p in [(x,y,z) for x in a for y in b for z in c]:
print(p)
27
for v, p, t in itertools.product(verbs, persons, tenses):
...
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。