根据最后两个元素删除具有重复项的嵌套列表中的列表

Remove lists within a nested list with duplicates based on last two elements

我有一个这样的嵌套列表:

my_list = [['10', 'A', 'A'], ['5', 'B', 'A'], ['2', 'B', 'B'], ['10','A','B']]

我想检查最后两个位置是否有重复的字母,如果没有,打印那些列表。

final_list = [['5','B','A'],['10','A','B']

最后,我想打印每个列表中的数值:

only_numbers = ['5','10']

但是,我卡在了列表中的识别重复项上。我找到了这个答案 Removing Duplicates from Nested List Based on First 2 Elements,但是当我尝试将其应用于上面的示例代码(和实际代码)时,我得到了一些重复的列表和一些没有重复的列表。

seen = set() 
seen_add = seen.add
final_list = [x for x in my_list if tuple(x[-2:]) not in seen and not seen_add(tuple(x[-2:]))]

但我得到:

final_list = [['10', 'A', 'A'], ['5', 'B', 'A'], ['2', 'B', 'B'], ['10', 'A', 'B']]

我错过了什么?


编辑:修正了我在下面的个人编码尝试,以便它的功能(感谢 Karl Knechtel 的解释)

only_numbers = []
for x in my_list:  
     if not x[1] == x[2]:
         add_number.append(x[0])
print(only_numbers)

这是一种使用 filter 和列表理解的方法

例如:

my_list = [['10', 'A', 'A'], ['5', 'B', 'A'], ['2', 'B', 'B'], ['10','A','B']]
result = [i for i, *_ in filter(lambda x: x[-1] != x[-2], my_list)]
# OR 
# [i for i, j, k in my_list if j != k]
print(result)

输出:

['5', '10']