簡體   English   中英

根據最后兩個元素刪除具有重復項的嵌套列表中的列表

[英]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)

Output:

['5', '10']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM