我有一个元组列表,其中每个元组中有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')]