在python中自动同时执行多个for循环

时间:2018-04-18 13:38:05

标签: python for-loop

我有一个具有挑战性的问题: 想象一下,我有一个长度相同的字符串列表,如下所示' seq'列表:

seq=['FFFSS', 'FFEEE', 'WWQQA', 'PPRSA', 'MMMMM', 'PPEEE','HMSII','KKKDD','WTYUI','OPOPO','YYYYY', 'QQERT','YYRER', 'NNBBB', 'CCXZZ', 'UIOOP', 'QQWEE', ….,'FFGEE']

但当然我的真实' seq' list有更多的字符串(至少100个字符串都具有相同的长度)。

如果我想同时打开字符串编号0到字符串编号3,我需要写一个多个' for循环'如下:

n= 0
for a0, a1, a2 in zip(seq[n+0], seq[n+1], seq[n+2]):   print(a0, a1, a2)

现在,如果我想扩展上述' for循环'并且打开字符串编号0到字符串编号5同时,我需要更改上面的代码,如下所示:

n= 0
for a0, a1, a2, a3, a4 in zip(seq[n+0], seq[n+1], seq[n+2], seq[n+3], seq[n+4]):   print(a0, a1, a2, a4)

以上代码的输出如下所示:

F F W P
F F W P
F E Q R
S E Q S
S E A A

最后想象我想要越来越多地扩展上面的代码,例如同时打开字符串数字0到字符串数字100,所以我当然不能手动扩展代码,我需要找到一种方法来扩展以上多个for循环'自动。想象一下,我需要最终的多循环如下:

n= 0
for a0, a1, a2, a3, a4, …, a100  in zip(seq[n+0], seq[n+1], seq[n+2], seq[n+3], seq[n+4], …, seq[n+100]):   print(a0, a1, a2, a4, …, a100)

我的问题是,如果我想要这些100' a'变量,有没有办法让多个循环'同时自动获取大量变量?

2 个答案:

答案 0 :(得分:3)

要创建seq[n+0], seq[n+1], ..., seq[n+100],请使用itemgetter:

from operator import itemgetter

seqs = [itemgetter(n+i)(seq) for i in range(101)]

for a in zip(*seqs):
    # do something with a[0], a[1], a[2] .....

答案 1 :(得分:2)

您可以将所有内容与zip(*a)一起压缩。

>>> l = ['abc', 'cba', 'xyz']
>>> for a in zip(*l):
...     print(a)
... 
('a', 'c', 'x')
('b', 'b', 'y')
('c', 'a', 'z')

然后,您可以使用a执行任何操作。例如:

>>> l = ['abc', 'cba', 'xyz']
>>> for a in zip(*l):
...     print(a[0] + a[2])
... 
ax
by
cz