我有一个列表列表,想要从中删除重复项。我有办法工作,但它看起来很难看,我不确定是否有更好的方法。
a_list = [[1,2],[2,3],[1,2]]
print [list(tup) for tup in set([tuple(x) for x in a_list])]
打印:
[[1,2],[2,3]]
这就是我想要的。我正在使用小清单,所以我不关心速度,但如果有更好的方法,我会感兴趣。
答案 0 :(得分:1)
你可以缩短一点:
print list(set(tuple(x) for x in a_list))
输出:
[(1, 2), (2, 3)]
如果您对显示格式不那么担心,那么只需取消最外面的列表转换,即可:
set([(1, 2), (2, 3)])
我在目前为止给出的三个答案上运行了一个计时器,使用/ usr / shar / dict / words作为每个元组的第二部分,第一个元素使用简单的 1 。该文件有近五十万(479,829)个字。
0.517719984055 list-> set-> list(您的原始代码) 1.30243611336 list-> set-> map(tmajest' s suggestion) ???建立新的名单(萨尔曼的建议)
最后一个还没有超过6分钟的运行时间。 顶部确实表明它仍然可以完全使用一个CPU。
答案 1 :(得分:0)
>>> a_list=[[1,2],[2,3],[1,2]]
>>> newlist=[]
>>> for each in a_list:
if each not in newlist:
newlist.append(each)
>>> newlist
[[1, 2], [2, 3]]
制作一个新的空列表。如果新列表中没有来自a_list的任何列表,请将其附加到新列表。希望这可以帮助。 :)
答案 2 :(得分:0)
如果最终结果必须是列表,那么实际上并没有更短的方式。如果需要,可以使用map而不是list comprehensions:
list(map(list, set(map(tuple, a_list))))