[英]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.