首页 > 解决方案 > 列出独特的元素,保持顺序。只记住刚刚看到的元素

问题描述

我有一个(嵌套元组的)列表,我想消除与元素具有相同第一项和最后一项的嵌套元组, 保留顺序

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))

标签: python

解决方案


在追加之前检查元素与先前追加的元素:

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)

[('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')]

推荐阅读