函数中的可变循环数(python)
Posted
技术标签:
【中文标题】函数中的可变循环数(python)【英文标题】:Variable number of loops in function (python) 【发布时间】:2018-09-16 06:47:50 【问题描述】:这是我想做的一个例子:
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
。您还应该能够编写一个返回生成器的函数,获取此类生成器的列表并遍历它们。
【参考方案1】:
您可以将变量参数列表传递给itertools.product
(使用生成器将字典转换为它们的项目),然后打印展平结果(因为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。
【讨论】:
你能帮忙吗。我的代码和那个有点不同 如果我的代码没有帮助,也许你可以提出一个参考这个问题的问题,并解释什么对你不起作用? 我已达到问题限制以上是关于函数中的可变循环数(python)的主要内容,如果未能解决你的问题,请参考以下文章