将大小为 n 的二进制数生成为元组:itertools.product(*[(0, 1)] * n)
Posted
技术标签:
【中文标题】将大小为 n 的二进制数生成为元组:itertools.product(*[(0, 1)] * n)【英文标题】:generating binary numbers of size n as tuples : itertools.product(*[(0, 1)] * n) 【发布时间】:2013-05-02 03:56:18 【问题描述】:我刚刚找到了这个说明
itertools.product(*[(0, 1)] * n)
由 PAG 发布。
有人能解释一下它是如何工作的吗?
我正在尝试找到一种在不重复 3 个袋子中的 n 个元组的情况下进行排列的方法 如果我愿意,我只能使用 itertools。谢谢【问题讨论】:
zip(*[iter(seq)]*3)
例如将一个序列分成 3 个一组,这是一个合适的用例。 product
接受 repeat
参数,该参数使此代码无用。
【参考方案1】:
[(0, 1)]
是由数字 0
和 1
组成的单个元组的列表。
[(0, 1)] * n
复制列表中的元组,所以我们得到
[(0, 1), (0, 1), ..., (0, 1), (0, 1)]
然后,如果我们查看itertools.product
函数,我们希望将每个元组作为单个参数传递。因此,我们使用*
-操作符将我们的列表解压缩为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)
【讨论】:
请注意使这段代码无用的重复参数 谢谢,但我不能重复排列。 @user1347096 如果您在我的回答中使用该功能,它不会重复。例如,pick_into_three_bags(3)
中的第一个元素将是 (0, 1, 2)
。
对不起,这不是我想要的,我可能不清楚,昨天我无法测试你的解决方案。如果我有元素a,b,c。我想找到将这些物品放入 3 个袋子的所有可能性,所以我应该有 [(),(),(a,b,c)], [(a,b),(c),()], [(a),(b,c),()] 等等...() 描述一个包的内容
@user1347096 啊,我明白你的意思了。等等,让我看看有没有函数可以做这种事情。以上是关于将大小为 n 的二进制数生成为元组:itertools.product(*[(0, 1)] * n)的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用pd.MultiIndex.from_tuples函数生成多层索引结构(MultiIndex)tuples参数指定输入数据为元组列表(列表中包含多个元组)
pandas使用pd.MultiIndex.from_tuples函数生成多层索引结构(MultiIndex)tuples参数指定输入数据为元组列表(列表中包含多个元组)