从具有相似元素的元组列表中删除重复的 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')]
我有一个元组列表,其中每个元组包含 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')]