如何在Python中使用生成器创建嵌套的for循环?

3

我尝试将这个嵌套的for循环转换为:

        for k,v in all_R.iteritems():
            for pairs in v:
                print pairs[1]

将其简化为一行代码,例如:

print ([pairs[1] for pairs in v for k,v in all_R.iteritems()])

但是我遇到了这个错误:
    UnboundLocalError: local variable 'v' referenced before assignment

all_R是一个defaultdict,其中每个值都有成对的键,我只对其中一个键值感兴趣:

     {'1-0002': [('A-75G', 'dnaN'), ('I245T', 'recF'),... ], '1-0004': [('A-75G', 'dnaN'), ('L161', 'dnaN'),...]}
1个回答

8

列表推导式的写法顺序与for循环相同,因此您实际上正在寻找(请注意顺序是相反的)

([pairs[1] for k,v in all_R.iteritems() for pairs in v ])

这是一个更清晰展示结构的分解:

[
    pairs[1]
        for k,v in all_R.iteritems()
            for pairs in v
]

如果您想使用生成器,如标题所示,您可以使用括号而不是方括号。

(pairs[1] for k,v in all_R.iteritems() for pairs in v)

那将创建一个具备你所需属性的生成器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接