Python 列出唯一的元素,保持顺序。只记得刚才看到的元素

Python 列出唯一的元素,保持顺序。只记得刚才看到的元素,python,Python,我有一个列表(嵌套元组),我想消除嵌套元组,它们的第一项和最后一项与其元素相同, 保持秩序: my_list = [('0.5', '00', '0-0'), ('0.75', '02', '0-0'), ('0.5', '02', '0-0'), ('0.75', '02', '0-0'), ('0.75', '03', '0-0'), ('0.75', '04', '0-0'), ('0.75', '05', '0-0'), ('0.75', '06', '0-0'), ('

我有一个列表(嵌套元组),我想消除嵌套元组,它们的第一项和最后一项与其元素相同, 保持秩序

my_list = [('0.5', '00', '0-0'),
 ('0.75', '02', '0-0'),
 ('0.5', '02', '0-0'),
 ('0.75', '02', '0-0'),
 ('0.75', '03', '0-0'),
 ('0.75', '04', '0-0'),
 ('0.75', '05', '0-0'),
 ('0.75', '06', '0-0'),
 ('0.75', '07', '0-0'),
 ('0.75', '08', '0-0'),
 ('0.75', '09', '0-0'),
 ('0.75', '10', '0-0'),
 ('0.75', '11', '0-0'),
 ('0.75', '13', '0-0'),
 ('0.75', '14', '0-0'),
 ('0.5', '15', '0-0'),
 ('0.75', '15', '0-0'),
 ('0.5', '15', '0-0')]
这是我需要的输出:

[('0.5', '00', '0-0'),
 ('0.75', '02', '0-0'),
 ('0.5', '02', '0-0'),
 ('0.75', '02', '0-0'),
 ('0.5', '15', '0-0'),
 ('0.75', '15', '0-0'),
 ('0.5', '15', '0-0')]
我试过了,但没有成功:

from more_itertools import unique_justseen

list(unique_justseen(my_list))

在追加之前,对照先前追加的元素检查元素:

out = []
for el in my_list:
    if not out or el[0] != out[-1][0] or el[-1] != out[-1][-1]:
        out.append(el)

print(out)
给予

您可以使用和lambda键,该键返回要分组的元组的第一个和最后一个元素:

>>> from itertools import groupby
>>> grouped = [next(g) for _, g in groupby(my_list, key=lambda x: (x[0], x[2]))]
>>> for t in grouped: print(t)
... 
('0.5', '00', '0-0')
('0.75', '02', '0-0')
('0.5', '02', '0-0')
('0.75', '02', '0-0')
('0.5', '15', '0-0')
('0.75', '15', '0-0')
('0.5', '15', '0-0')

非元组的第一项和列表项相同吗?你是什么意思?@ShivamJha:有三个元组,第一个和最后一个项目
'0.5'
'0-0'
在我的示例中,my_list[3:14]中的嵌套元组具有相同的“0.75”,并且“0-0”OP希望每个“chunk”中的第一个元组,其中chunk由相同的第一个和最后一个元素定义。我似乎很清楚。我将按每个第一个和最后一个元素运行分组,并从groupby列表中获取第一个元素。您的示例输出具有重复项:
('0.75'、'02'、'0-0')
显示两次。你的问题是什么?@khaledkoubaa很高兴它能起作用。我已经回答了问题中给出的简单案例,它似乎不需要任何复杂的东西(我不太担心
out[-1]
在这里出现两次的事实)——但也请查看ggorlen的答案,了解一种通用方法,如果需要以更复杂的方式对项目进行分组,您可以采用这种方法。
>>> from itertools import groupby
>>> grouped = [next(g) for _, g in groupby(my_list, key=lambda x: (x[0], x[2]))]
>>> for t in grouped: print(t)
... 
('0.5', '00', '0-0')
('0.75', '02', '0-0')
('0.5', '02', '0-0')
('0.75', '02', '0-0')
('0.5', '15', '0-0')
('0.75', '15', '0-0')
('0.5', '15', '0-0')