我使用 itertools.product()
创建了不带镜像的所有三元排列:
import itertools
list_1 = [list(i) for i in itertools.product(tuple(range(4)), repeat=3) if tuple(reversed(i)) >= tuple(i)]
输出:
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 1, 0], [0, 1, 1], [0, 1, 2], [0, 1, 3], [0, 2, 0], [0, 2, 1], [0, 2, 2], [0, 2, 3], [0, 3, 0], [0, 3, 1], [0, 3, 2], [0, 3, 3], [1, 0, 1], [1, 0, 2], [1, 0, 3], [1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1], [1, 3, 2], [1, 3, 3], [2, 0, 2], [2, 0, 3], [2, 1, 2], [2, 1, 3], [2, 2, 2], [2, 2, 3], [2, 3, 2], [2, 3, 3], [3, 0, 3], [3, 1, 3], [3, 2, 3], [3, 3, 3]]
我该如何从列表
list_1
中删除这些子列表,这些子列表具有相应值的相同数量,然后只保留其中一个?例如,在子列表
[1,1,2],[1,2,1]
中,所有子列表中给定值的数量都相同,即在每个子列表中都有两个1
和一个2
,因此我认为这些子列表是相同的,所以我只想保留第一个,即[1,1,2]
。怎么做呢?我考虑计算每个子列表中相应值的数量,并创建一个具有出现特征的列表,然后在循环中检查列表list_1中的每个元素或具有给定特征的元素是否已经出现。但我觉得这太复杂了。
Counter
结构;如果两个项具有相同的count
字典,则删除重复项。这足够提示了吗? - Prune