在python中如何在一个循环中同时运行两个循环

2024-10-03 13:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法把两个循环放在一个循环中?我有:

for getFeature in layerNameValueGetObj.getFeatures():
    for setFeature in layerNameValueSetObj.getFeatures():

我想在一个循环下运行layerNameValueGetObj.getFeatures()layerNameValueSetObj.getFeatures()。我该怎么做?你知道吗

我不想嵌套它们,我想一次得到两个循环列。你知道吗


Tags: infor办法getfeaturessetfeaturegetfeaturelayernamevaluesetobjlayernamevaluegetobj
3条回答

zip_longest将迭代,直到使用所有列表。对于zip,结果被截断为最短的迭代器。你知道吗

from itertools import zip_longest    

for get_feature, set_feature in zip_longest(layerNameValueGetObj.getFeatures(), layerNameValueSetObj.getFeatures()):
    print(get_feature, set_feature)

以下是zipzip_longest输出的示例:

DummyObject设置代码:

class DummyObject:
    def __init__(self, reversed=False, length=10):
        self.reversed = reversed
        self.length = length

    def getFeatures(self):
        if self.reversed:
            g = reversed(range(self.length))
        else:
            g = range(self.length)
        return g

layerNameValueGetObj = DummyObject(False, length=10)
layerNameValueSetObj = DummyObject(True, length=15)

使用zip_longest运行:

from itertools import zip_longest    

for get_feature, set_feature in zip_longest(layerNameValueGetObj.getFeatures(), layerNameValueSetObj.getFeatures()):
    print(get_feature, set_feature)

zip\U最长结果:

0 14
1 13
2 12
3 11
4 10
5 9
6 8
7 7
8 6
9 5
None 4
None 3
None 2
None 1
None 0

使用zip运行:

for get_feature, set_feature in zip(layerNameValueGetObj.getFeatures(), layerNameValueSetObj.getFeatures()):
        print(get_feature, set_feature)

zip结果:

0 14
1 13
2 12
3 11
4 10
5 9
6 8
7 7
8 6
9 5

因此,在layerNameValueGetObj有10个特征,layerNameValueSetObj有15个特征的情况下,zip只处理总共10个特征,其余5个layerNameValueSetObj特征被截断。你知道吗

使用zip_longest,较短的迭代器将返回不存在元素的None。(如上所示)

你可以使用zip

for a, b in zip(list_a, list_b): 
    print a, b

itertools.product的存在正是为了这个目的

import itertools

for getFeature, setFeature in itertools.product(layerNameValueGetObj.getFeatures(), layerNameValueSetObj.getFeatures()):
    # dostuff

相关问题 更多 >