【问题标题】:Python eliminate duplicates of list with unhashable elements in one line [duplicate]Python在一行中消除了具有不可散列元素的列表的重复项[重复]
【发布时间】:2012-06-02 19:19:57
【问题描述】:

可能重复:
Python: removing duplicates from a list of lists

说我有清单

a=[1,2,1,2,1,3]

如果 a 中的所有元素都是可散列的(就像在那种情况下一样),这将完成这项工作:

list(set(a))

但是,如果

a=[[1,2],[1,2],[1,3]]

?

【问题讨论】:

标签: python list-comprehension


【解决方案1】:

Python 2

>>> from itertools import groupby
>>> a = [[1,2],[1,2],[1,3]]
>>> [k for k,v in groupby(sorted(a))]
[[1, 2], [1, 3]]

也适用于 Python 3,但需要注意的是所有元素都必须是可排序的类型。

【讨论】:

  • 如果无法比较元素,这将不起作用(例如[[1,2], [1,2], ['bug']])。但也许你可以通过sorted(a, key=repr) 来解决这个问题。
  • @ekhumoro 啊,我明白你的意思。您正在谈论在 Python 3 中 sorted 在这种情况下将如何提供 unorderable types。当我回答这个问题时,Python 3 并不流行,所以这是一个 Python 2 的答案。我会更新以提及这一点
【解决方案2】:

此集合推导适用于列表列表以生成一组元组:

>>> {(tuple(e)) for e in a}
set([(1, 2), (1, 3)])

然后用它再次将它变成一个列表列表,没有重复:

>>> [list(x) for x in {(tuple(e)) for e in a}]
[[1, 2], [1, 3]]

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 2020-04-05
    • 2016-09-21
    • 2018-02-18
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多