我有一个具有挑战性的问题: 想象一下,我有一个长度相同的字符串列表,如下所示' 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'变量,有没有办法让多个循环'同时自动获取大量变量?
答案 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