4 回答
TA贡献1786条经验 获得超13个赞
删除重复项的最佳方法是将它们添加到集合中。将最后一个元素添加到setas 以跟踪所有唯一值。当您要添加的值已经存在于集合中unique时,如果不存在则不执行任何操作,添加要设置的值unique并将 lst 附加到结果列表中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条经验 获得超12个赞
您可以为唯一数据设置一个新数组并跟踪您迄今为止看到的项目。然后,当您遍历数据时,如果您之前没有看到该列表中的最后一个元素,则将其附加到唯一数据并将其添加到已看到的列表中。
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条经验 获得超3个赞
使用集合过滤掉已经看到密钥的条目是最有效的方法。
这是一个使用具有内部副作用的列表理解的单行示例:
UniqueData = [rd for seen in [set()] for rd in RawData if not(rd[-1] in seen or seen.add(rd[-1])) ]
TA贡献1802条经验 获得超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)
添加回答
举报