【问题标题】:Python: Remove Duplicate Items from Nested listPython:从嵌套列表中删除重复项
【发布时间】:2013-02-23 04:57:42
【问题描述】:
mylist = [[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]

我想删除重复项,重复项可以反转。结果应该是:

mylist = [[1,2],[4,5],[3,4]]

如何在 Python 中实现这一点?

【问题讨论】:

  • 顺序重要吗?
  • -1:避免将变量命名为内置函数
  • @Volatility,无序无所谓。
  • @abhijit,这只是一个例子,不是真正的代码。
  • 即便如此,您也不应该使用list 作为变量名。

标签: python list duplicates


【解决方案1】:
lst=[[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]
fset = set(frozenset(x) for x in lst)
lst = [list(x) for x in fset]

这不会保留原始列表的顺序,也不会保留子列表的顺序。

>>> lst=[[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]
>>> fset = set(frozenset(x) for x in lst)
>>> lst = [list(x) for x in fset]
>>> lst
[[1, 2], [3, 4], [4, 5]]

【讨论】:

  • 不完全是,假设您的lst 中有[0,0],这将折叠为[0]
  • 确实如此。如果您保证输入始终只有 2 个项目并且您希望将其保留在输出中,那么将 1 元素列表转换为 2 元素列表的后处理非常容易:)
【解决方案2】:

如果顺序很重要,您可以随时使用 OrderedDict

>>> unq_lst = OrderedDict()
>>> for e in lst:
    unq_lst.setdefault(frozenset(e),[]).append(e)


>>> map(list, unq_lst.keys())
[[1, 2], [4, 5], [3, 4]]

【讨论】:

    【解决方案3】:

    如果顺序不重要:

    def rem_dup(l: List[List[Any]]) -> List[List[Any]]:
        tuples = map(lambda t: tuple(sorted(t)), l)
        return [list(t) for t in set(tuples)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 2023-02-06
      相关资源
      最近更新 更多