产生大小为n的二进制数元组:itertools.product(* [(0,1)] * N)
-
我刚发现该指令产生大小为n的二进制数元组:itertools.product(* [(0,1)] * N)
itertools.product(*[(0, 1)] * n)
张贴由PAG。
有人可以解释它是如何工作的?
- 我正在试图找到一种方法来做没有重复的3个包中的n个元组的排列 我只能使用itertools,如果我想。由于
[(0, 1)]
是数字0
和1
的一个元组的列表。
[(0, 1)] * n
复制的元组名单内,所以我们得到
[(0, 1), (0, 1), ..., (0, 1), (0, 1)]
那么,如果我们看一下itertools.product
功能,我们希望在每个元组的那些单参数的传递。因此,我们使用*
-operator将我们的列表解包到itertools.product
函数的参数中。所以,我们的功能等同于:
itertools.product((0, 1), (0, 1), ..., (0, 1), (0, 1))
其计算n
0
S和1
S的所有排列。
注意itertools.product
需要repeat
参数,它应该被用来做这样的事情:
itertools.product((0, 1), repeat=n)
要做到排列,您可以使用itertools.permutations
功能:
def pick_into_three_bags(n):
return itertools.permutations(range(n), 3)
请注意重复参数,使此代码无用 – jamylak 2013-05-02 04:16:11
@jamylak感谢您的提示,编辑。 – Xymostech 2013-05-02 04:19:54
感谢,但我不能有重复的排列。 – user1347096 2013-05-02 04:26:36
'zip(* [iter(seq)] * 3)'例如以3为一组分割一个序列,这是一个恰当的用例。 'product'接受一个'repeat'参数,使得这个代码无用。 – jamylak 2013-05-02 04:15:13