首页 > 解决方案 > Python:如何删除列表列表中的重复无序子列表和单调子列表

问题描述

我在这里看到了一些非常相关的问题,但他们的答案对我不起作用。我有一个列表列表,其中 1) 一些子列表重复但它们的元素可能是无序的,2) 一些子列表包含单调的元素但长度不同。例如

g = [[1, 2, 3], [3, 2, 1], [1, 1], [1, 1, 1], [1, 3, 2], [9, 0, 1], [4, 3, 2]]

根据我的问题,输出自然应该是:

g = [[1, 2, 3], [1, 1], [1, 1, 1], [9, 0, 1], [4, 3, 2]]

我已经尝试过设置。它适用于重复无序的子列表,但它将具有不同长度的单调元素的子列表视为相同。

标签: pythonlistset

解决方案


使用排序的元组作为哈希:

>>> g = [[1, 2, 3], [3, 2, 1], [1, 1], [1, 1, 1], [1, 3, 2], [9, 0, 1], [4, 3, 2]]
>>> result = []
>>> seen = set()
>>> for x in g:
...     hsh = tuple(sorted(x))
...     if hsh not in seen:
...         result.append(x)
...         seen.add(hsh)
...
>>> result
[[1, 2, 3], [1, 1], [1, 1, 1], [9, 0, 1], [4, 3, 2]]

如果您的子列表很小,这应该足够快,并且至少逻辑清晰。


推荐阅读