函数中可变数量的循环(python)

用户名

这是我想做的事的一个例子:

d1 = {'a':1,'b':2,'c':3}
d2 = {'aa':11,'bb':22,'cc':33}
d3 = {'aaa':111,'bbb':222,'ccc':333}

def nLoop(*args):

    n = len(args)

    if n == 1:
        for k0,v0 in args[0].iteritems():
            print k0, v0

    if n == 2:
        for k0,v0 in args[0].iteritems():
            for k1,v1 in args[1].iteritems():
                print k0, v0, k1, v1

    if n == 3:
        for k0,v0 in args[0].iteritems():
            for k1,v1 in args[1].iteritems():
                for k2,v2 in args[2].iteritems():
                    print k0, v0, k1, v1, k2, v2

nLoop(d1,d2,d3)

我的问题是:有没有if条件的方法吗?也许使用装饰器?

让·弗朗索瓦·法布尔

您可以将变量参数列表传递给itertools.product(使用生成器来将dict转换为它们的项),然后打印展平的结果(因为product返回元组的元组):

from __future__ import print_function
import itertools

d1 = {'a':1,'b':2,'c':3}
d2 = {'aa':11,'bb':22,'cc':33}
d3 = {'aaa':111,'bbb':222,'ccc':333}


def nLoop(*args):
    for t in itertools.product(*(a.items() for a in args)):
        print(*(x for a in t for x in a))

nLoop(d1,d2,d3)

这个新nLoop函数的输出与您的输出相同(如果不考虑顺序,因为字典顺序可能在两次运行之间改变)

请注意,这是符合Python 3的解决方案,但也适用于Python 2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章