Skip to main content
 首页 » 编程设计

python之从具有重复元素的列表中获取所有可能的组合

2025年05月04日16soundcode

我有一个包含重复元素的列表,例如 array = [2,2,2,7]。

如果我使用建议的解决方案in this answer (使用 itertools.combinations()),我得到:

() 
(7,) 
(2,) 
(2,) 
(2,) 
(7, 2) 
(7, 2) 
(7, 2) 
(2, 2) 
(2, 2) 
(2, 2) 
(7, 2, 2) 
(7, 2, 2) 
(7, 2, 2) 
(2, 2, 2) 
(7, 2, 2, 2) 

如您所见,一些“组合”是重复的,例如(7,2,2) 出现了 3 次。

我想要的输出是:

() 
(7,) 
(2,) 
(7, 2) 
(2, 2) 
(7, 2, 2) 
(2, 2, 2) 
(7, 2, 2, 2) 

我可以检查重复组合的输出,但我认为这不是解决此问题的最佳方法。

请您参考如下方法:

您可以获取一组组合,然后将它们链接在一起。

from itertools import chain, combinations 
 
arr = [2, 2, 2, 7] 
 
list(chain.from_iterable(set(combinations(arr, i)) for i in range(len(arr) + 1))) 
# [(), (7,), (2,), (2, 7), (2, 2), (2, 2, 2), (2, 2, 7), (2, 2, 2, 7)]