在python中自动同时执行多个for循环
我有一个富有挑战性的问题: 假设我有一个长度相同的字符串列表,如下面的“seq”列表:在python中自动同时执行多个for循环,python,for-loop,Python,For Loop,我有一个富有挑战性的问题: 假设我有一个长度相同的字符串列表,如下面的“seq”列表: seq=['FFFSS', 'FFEEE', 'WWQQA', 'PPRSA', 'MMMMM', 'PPEEE','HMSII','KKKDD','WTYUI','OPOPO','YYYYY', 'QQERT','YYRER', 'NNBBB', 'CCXZZ', 'UIOOP', 'QQWEE', ….,'FFGEE'] 当然,我真正的“seq”列表中还有更多的字符串,至少有100个长度相同的字符串 如
seq=['FFFSS', 'FFEEE', 'WWQQA', 'PPRSA', 'MMMMM', 'PPEEE','HMSII','KKKDD','WTYUI','OPOPO','YYYYY', 'QQERT','YYRER', 'NNBBB', 'CCXZZ', 'UIOOP', 'QQWEE', ….,'FFGEE']
当然,我真正的“seq”列表中还有更多的字符串,至少有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)
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)
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)
现在,如果我想同时将上面的“for循环”和打开的字符串编号0扩展到字符串编号5,我需要更改上面的代码,如下所示:
n= 0
for a0, a1, a2 in zip(seq[n+0], seq[n+1], seq[n+2]): print(a0, a1, a2)
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)
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)
上述代码的输出如下所示,这是我最喜欢的输出:
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 in zip(seq[n+0], seq[n+1], seq[n+2]): print(a0, a1, a2)
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)
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’变量,有没有办法同时为大量变量自动生成多个‘for循环’ 您可以使用zip*a将所有内容压缩在一起 然后你可以用a做任何你想做的事。例如:
>>> l = ['abc', 'cba', 'xyz']
>>> for a in zip(*l):
... print(a[0] + a[2])
...
ax
by
cz
你可以用zip*a把所有东西都拉在一起 然后你可以用a做任何你想做的事。例如:
>>> l = ['abc', 'cba', 'xyz']
>>> for a in zip(*l):
... print(a[0] + a[2])
...
ax
by
cz
要创建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] .....
要创建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] .....
为什么不把它分配给a,然后用[0],a[1]…etcif对它进行索引呢?我甚至可以这样做,我该怎么写100个seq[n+0],seq[n+1],…,seq[n+100]?你不需要左边的a0…a100,你可以把它作为一个元组捕捉,右边可以用*seq[begin:end]*seq[begin:end]替换,这正是我需要的。非常感谢你为什么不把它分配给a,并用[0],a[1]…etcif对它进行索引呢?我甚至可以这样做,我能做什么来写100个seq[n+0],seq[n+1],…,seq[n+100]?你不需要左边的a0…a100,你可以把它作为一个元组来捕捉,右边可以用*seq[begin:end]*seq[begin:end]替换。非常感谢你