从具有相似元素的元组列表中删除重复的 3 个值元组

Remove Duplicate 3 value Tuples from list of tuples with similar elements

我有一个元组列表,其中每个元组包含 3 个元素:

slices = [('location', 'region', 'sub_region'),
 ('location', 'sub_region', ' job_level'),
 ('sub_region', 'region', 'location')]

在上面的例子中,第一个元组和最后一个元组将被认为是重复的,因为其中的元素是相同的(位置、区域、sub_region)。我只想保留其中一个,这样我的 期望输出 就会变成:

[('location', 'region', 'sub_region'),
 ('location', 'sub_region', ' job_level')]

我试图通过列表理解来做到这一点,但我的输出最终是一个空列表:

new_slices = [(x, y, z) for x, y, z in slices if (z, x, y) not in slices]

当前输出:

new_slices = []

有什么想法可以实现吗?

slices = [('location', 'region', 'sub_region'),
 ('location', 'sub_region', ' job_level'),
 ('sub_region', 'region', 'location')]

set(tuple(sorted(s)) for s in slices)

输出- {(' job_level', 'location', 'sub_region'), ('location', 'region', 'sub_region')}

如果你想要列表类型,你可以再次将其转换为列表

注意,你提到的第一个和最后一个元组是一些。实际上它们不是 - 因为“location”和“location”不一样

如果更改元素的顺序并不重要,因为您可以在没有 sorting.

的情况下执行此操作

(排序顺序为 O((n^2)log(n)) 但没有排序顺序为 O(n ))

您可以使用 set 然后转换为 tuple 然后得到 set 如下所示:

>>> set(tuple(set(slc)) for slc in slices)
{('location', 'sub_region', ' job_level'),
 ('region', 'location', 'sub_region')}

>>> list(set(tuple(set(slc)) for slc in slices))
[('region', 'location', 'sub_region'),
 ('location', 'sub_region', ' job_level')]