Python 将两个回路合并为一个回路
我的代码中有三个不同的循环,但我想知道是否有一种方法可以将其中两个循环组合起来,只循环一次。我的代码如下:Python 将两个回路合并为一个回路,python,python-3.x,Python,Python 3.x,我的代码中有三个不同的循环,但我想知道是否有一种方法可以将其中两个循环组合起来,只循环一次。我的代码如下: for x in groups: A bunch of code that produces the following... frames[x] highcs[x] 然后我在下面的两个循环中循环。这些是我想要结合的 for x, frame in frames.items(): more unrelated code for x, highc in h
for x in groups:
A bunch of code that produces the following...
frames[x]
highcs[x]
然后我在下面的两个循环中循环。这些是我想要结合的
for x, frame in frames.items():
more unrelated code
for x, highc in highcs.items():
最后两个循环实际上只是使用xlsxwriter创建excel工作簿。第一个循环创建工作簿,并将数据帧从帧[x]输入工作表。然后highc只是返回相同的工作表并添加新的数据帧。不确定您在做什么,但可能会再次迭代这些组
for group in groups:
frame = frames[group]
highc = highcs[group]
...
frames
和highcs
的长度相同,您可以使用zip()立即迭代它们:
for (f,frame), (h, highc) in zip(frames.items(), highcs.items()):
# do your work here
zip()
此函数返回元组列表,其中第i个元组包含每个参数序列或iterables中的第i个元素。返回的列表的长度被截断为最短参数序列的长度
使用itertools中的izip
from itertools import izip
for (x, frame), (x, highc) in izip(frames.items(), highcs.items()):
...
制作一个迭代器,聚合来自每个ITerable的元素。与zip()类似,只是它返回一个迭代器而不是列表。用于一次对多个迭代进行锁步迭代
izip比zip更高效,因为izip返回的是迭代器而不是列表。为了提高效率,将.items()替换为.iteritems()不知道这种方法有多像python,但我可以想出两种快速而肮脏的方法 是否保证使用相同的钥匙为其设置钥匙?如果是这样,您可以尝试:
for key in frames.keys():
doSomething(frames[key])
doSomethingElse(highcs[key])
或者,如果没有,它们的长度是否相同?你可以:
for i in range(len(frames.keys())):
frameKey = frames.keys[i]
highcsKey = highcs.keys[i]
doSomething(frames[frameKey])
doSomethingElse(highcs[highcsKey])
即使它们的长度不相同,您也可以(而且可能应该)测试两个词典的keys()列表的长度,并且在通过较短词典的边界后,只索引较长的词典。帧和highcs是否预期具有相同的长度?帧和highcs是否具有相同的长度?是,它们在纵向上是相同的,您所说的…是指在相同的工作表上返回并添加新的数据帧吗?是指附加数据框吗?对不起,我的意思是将已经创建的数据框添加到excel工作表中。不附加任何内容。如果
帧的长度
和高cs
不相等,我们仍然可以使用zip()
?