[英]Combine two loop into one
我的代码中有三个不同的循环,但我想知道是否有办法将它们中的两个组合在一起只循环一次。 我的代码如下:
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返回相同的工作表并添加新的数据帧。
frames
和highcs
的长度相同,你可以使用zip()一次迭代它们:
for (f,frame), (h, highc) in zip(frames.items(), highcs.items()):
# do your work here
zip()
此函数返回元组列表,其中第i个元组包含来自每个参数序列或可迭代的第i个元素。返回的列表的长度被截断为最短参数序列的长度。
使用itertools中的izip
from itertools import izip
for (x, frame), (x, highc) in izip(frames.items(), highcs.items()):
...
https://docs.python.org/2/library/itertools.html#itertools.izip
创建一个聚合来自每个迭代的元素的迭代器。 像zip()一样,除了它返回迭代器而不是列表。 用于一次迭代几次迭代的迭代步骤。
izip比zip更有效,因为izip返回迭代器而不是列表。 为了提高效率,请将.items()替换为.iteritems()
不确定你在做什么,但可能会再次遍历这些组?
for group in groups:
frame = frames[group]
highc = highcs[group]
...
Dunno这种方法是多么pythonic,但我可以想到两种快速而肮脏的方法。
他们是否保证使用相同的键进行键控? 如果是这样,您可以尝试:
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()列表的长度,并且只有在通过较短的字符串时才转换为较长的字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.