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



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

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

在上面的例子中,第一个元组和最后一个元组将被视为重复,因为其中的元素是相同的(location、region、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'(,("位置"、"区域"、"子区域"(}

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

注意,您提到的第一个和最后一个元组是一些。事实上,他们不是——因为";位置";以及";位置";不是同一

如果更改元素的顺序对您来说无关紧要,那么您可以在没有sorting的情况下执行此操作。

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

你可以使用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')]

最新更新