如何从Python中的未排序列表中删除部分重复项?
问题描述:
我有一个大名单如何从Python中的未排序列表中删除部分重复项?
[[1,.., ..],[2,...,...],[5,...,...],[1,...,...]]
我需要删除具有相同的第一个值的所有元素。 (只保留一次)
如何最有效地做到这一点?
答
保留一个set
到目前为止看到的第一个值,并且只保留子列表,如果他们的第一个值不在集合中。
因为set.add
总是返回None
,keys.add(sublist[0]) or sublist
相同None or sublist
这是一样的sublist
,因此它不会影响什么被保留在列表中,同时让您值添加到组列表解析里。
keys = set()
biglist = [keys.add(sublist[0]) or sublist
for sublist in biglist
if sublist[0] not in keys]
del keys # if you don't need it any more
答
如果列表的顺序没有关系,你可以试试这个:
dict([(sublist[0], sublist) for sublist in biglist]).values()
或
dict([(sublist[0], sublist) for sublist in reversed(biglist)]).values()
不同的是,第二个返回的第一个列表相同的第一个值,另一个相反。
哇,这是相当好的答案,它的工作原理。我花了几分钟才弄明白。感谢您的解释 – siamii 2012-03-22 05:49:34