具有重复项的集合中的唯一组合

Unique combinations from a set with duplicates

在python,当我写:

L = [2,2,3]
list(itertools.combinations(L, 2))

我明白了:

[(2, 2), (2, 3), (2, 3)]

我只想得到这个:

[(2, 2), (2, 3)]

也就是说,每个组合应该只出现一次,即使原始列表包含两个 2。

仅获取 L(大小为 2)的每个子集一次的有效方法是什么?

我试过的:

list(itertools.combinations(set(L), 2))

returns:

[(2, 3)]

这不好 - 我也想得到 (2,2),因为它是 L 的子集。

list(itertools.combinations_with_replacement(set(L), 2))

returns:

[(2, 2), (2, 3), (3, 3)]

这不好 - 我不需要 (3,3),因为它不是 L 的子集。

from more_itertools import distinct_combinations

print(*distinct_combinations([2, 2, 3], 2))

输出:

(2, 2) (2, 3)

Documentation,表示:

Equivalent to set(combinations(iterable)), except duplicates are not generated and thrown away. For larger input sequences this is much more efficient.

import itertools

L = [2,2,2,3]
print(list(set(itertools.combinations(L, 2))))

输出:

[(2, 3), (2, 2)]