【发布时间】:2017-07-10 22:19:08
【问题描述】:
好的。我正在寻找最聪明、更紧凑的方法来执行此功能
def f():
[[a,b,c] for a in range(6) for b in range(6) for c in range(6)]
它应该为值 a、b、c 生成所有组合,如下所示:
[0,0,0]
[0,0,1]
[0,0,2]
...
[1,0,0]
[1,0,1]
...
等等……
但我希望它是灵活的,所以我可以更改范围或可迭代,以及生成的数组的长度。范围很容易:
def f(min, max):
[[a,b,c] for a in range(min,max) for b in range(min,max) for c in range(min,max)]
这对于 3 长度的数组是可以的,但我现在正在考虑制作 4 长度的数组或 7 长度的数组,并在同一范围内为它们生成所有组合。
它必须存在一种简单的方法,可能以某种方式连接数组或嵌套理解列表,但我的解决方案似乎太复杂了。
很抱歉发了这么长的帖子。
【问题讨论】:
-
itertools模块有一个product函数,可以完全满足您的需求。from itertools import product; product(range(6), range(6), range(6))。无论迭代器放在最后一个循环中最快。
标签: python arrays python-3.x list-comprehension