我有一个可迭代对象,比如:
a = [0, 1, 2, 3]
我想要所有可能的基数 3 集合,这样:
- 允许重复,但不得超过 2 次。
- 订单很重要。
第一个条件是 with replacement 属性的泛化,允许任意元素的任意数量的重复。
我尝试过的:
itertools.permutation 不允许重复。
itertools.product(a, repeat=3) 允许重复一个元素两次和三次,这违反了第一个条件。 如果我输入 repeat=2,它给出长度为 2 的子集,我想要 3。
我该怎么做?
请您参考如下方法:
这是一个快速而肮脏的。 (或者好吧,我想不是那么脏)在传递给排列之前自己处理重复。取一个集合以确保唯一性。
from itertools import permutations
n_repeats = 2
cardinality = 3
a = [0, 1, 2, 3]
for group in set(permutations(a*n_repeats, cardinality)):
print(group)
输出片段:
(3, 0, 2)
(0, 1, 1)
(1, 0, 3)
(1, 3, 2)
(3, 0, 3)
(0, 1, 2)
(1, 0, 0)
...
