【问题标题】:removing duplicates from nested list [duplicate]从嵌套列表中删除重复项[重复]
【发布时间】:2016-10-19 21:16:22
【问题描述】:

我有一个列表列表,想从中删除重复项。我有办法工作,但它看起来很丑,我不确定是否有更好的方法。

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]]

这就是我想要的。我为此使用了小列表,所以不关心速度,但我感兴趣的是是否有更好的方法来做到这一点。

【问题讨论】:

标签: python list


【解决方案1】:

你可以缩短一点:

print list(set(tuple(x) for x in a_list))

输出:

[(1, 2), (2, 3)]

如果您不太担心显示格式,那么只需省略最外层的 list 转换,给出:

set([(1, 2), (2, 3)])

我对到目前为止给出的三个答案运行了一个计时器,使用 /usr/shar/dict/words 作为每个元组的第二部分,一个简单的 1 作为第一个元素。该文件有近半百万 (479,829) 个字。

0.517719984055 list->set->list(你的原始代码) 1.30243611336 list->set->map(tmajest的建议) ???建立新列表(萨尔曼的建议)

最后一个在超过 6 分钟的运行时间内没有完成。 top 确实表明它仍然充分利用了一个 CPU。

【讨论】:

  • 这会创建一个包含元组的列表。我希望它是一个与列表嵌套的列表。
【解决方案2】:
>>> 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 中的任何列表不存在于 newlist 中,则将其附加到 newlist。希望这可以帮助。 :)

【讨论】:

    【解决方案3】:

    如果最终结果必须是列表,那么实际上没有更短的方法。如果需要,您可以使用 map 而不是列表推导:

    list(map(list, set(map(tuple, a_list))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2021-11-27
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多