Skip to main content
 首页 » 编程设计

python之如何使用 itertools 组合和排列来找到这个

2025年05月04日22虾米姐

我有一个可迭代对象,比如:

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) 
...