4 回答

TA貢獻1786條經(jīng)驗 獲得超13個贊
刪除重復(fù)項的最佳方法是將它們添加到集合中。將最后一個元素添加到setas 以跟蹤所有唯一值。當您要添加的值已經(jīng)存在于集合中unique時,如果不存在則不執(zhí)行任何操作,添加要設(shè)置的值unique并將 lst 附加到結(jié)果列表中new。
嘗試這個。
new=[]
unique=set()
for lst in RawData:
if lst[-1] not in unique:
unique.add(lst[-1])
new.append(lst)
print(new)
#[['a', 'b', 'x', '15/30'],
['d', 'e', 'f', 'g', 'h', '20/30'],
['w', 'x', 'y', 'z', '10/10'],
['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]

TA貢獻2012條經(jīng)驗 獲得超12個贊
您可以為唯一數(shù)據(jù)設(shè)置一個新數(shù)組并跟蹤您迄今為止看到的項目。然后,當您遍歷數(shù)據(jù)時,如果您之前沒有看到該列表中的最后一個元素,則將其附加到唯一數(shù)據(jù)并將其添加到已看到的列表中。
RawData = [['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'],
['a', 'x', 'c', '15/30'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60'], ['x', 'b', 'c', '15/30']]
seen = []
UniqueData = []
for data in RawData:
if data[-1] not in seen:
UniqueData.append(data)
seen.append(data[-1])
print(UniqueData)
輸出
[['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]

TA貢獻1836條經(jīng)驗 獲得超3個贊
使用集合過濾掉已經(jīng)看到密鑰的條目是最有效的方法。
這是一個使用具有內(nèi)部副作用的列表理解的單行示例:
UniqueData = [rd for seen in [set()] for rd in RawData if not(rd[-1] in seen or seen.add(rd[-1])) ]

TA貢獻1802條經(jīng)驗 獲得超10個贊
RawData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['a','x','c','15/30'],['i','j','k','l','m','n','o','p','20/60'],['x','b','c','15/30']]
seen = []
seen_indices = []
for _,i in enumerate(RawData):
# _ -> index
# i -> individual lists
if i[-1] not in seen:
seen.append(i[-1])
else:
seen_indices.append(_)
for index in sorted(seen_indices, reverse=True):
del RawData[index]
print (RawData)
添加回答
舉報