首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重构几个嵌套的for循环和条件

重构几个嵌套的for循环和条件
EN

Stack Overflow用户
提问于 2016-03-15 18:39:40
回答 1查看 249关注 0票数 3

考虑下面这段代码

代码语言:javascript
复制
for a in generator1():
    if test(a):
        for b in generator2():
            if test(a, b):
                for c in generator3():
                    if test(a, b, c):
                        print "Found {} {} {}".format(a, b, c)

在每次循环之前使用test是很重要的,因为生成器可以产生很多值(10^6-10^8)。我不想做昂贵的计算,因为很明显,由于ab的值,整个三元组将无法通过测试。

这段代码可以简化吗?如果我想添加更多的内部循环(测试4个5)怎么办?

EN

回答 1

Stack Overflow用户

发布于 2016-03-15 19:07:18

下面是一个使用itertoolsall进行切片的示例:

代码语言:javascript
复制
ag = range(10)
bg = range(10)
cg = range(10)

import itertools

# only returns true if all numbers are equal
def test(args):
    return len(set(args)) <= 1

for comb in itertools.product(ag, bg, cg):
    if all(test(comb[:limit]) for limit in range(len(comb) + 1)):
        print "found", comb

  • itertools生成generators.
  • all的所有组合我使用切片来生成所有参数(列表的前缀)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36008887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档