具有重复项的集合中的唯一组合
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)]
在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)]