Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将两个回路合并为一个回路_Python_Python 3.x - Fatal编程技术网

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()