python - 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]]
我已经尝试过设置。它适用于重复无序的子列表,但它将具有不同长度的单调元素的子列表视为相同。
解决方案
使用排序的元组作为哈希:
>>> 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]]
如果您的子列表很小,这应该足够快,并且至少逻辑清晰。
推荐阅读
- amazon-web-services - 无法使用 boto3 停用 Amazon S3 存储桶上的对象锁定
- r - 如何编辑图例标题和标签?
- javascript - 将 API 数据分配给 Javascript 中的变量
- python - 如何在最大值条件下保持重复观察?
- javascript - 如何在charts.js中将动态字符串作为数据集传递
- python - 无法使用 Anaconda 解释器在 PyCharm GUI 中安装 OpenCV
- testing - 如何测试 Flutter 小部件的固有大小
- ios - OpenCV HSV:iOS 与 Python 和 C++
- django - 我有两个数据要渲染
- ruby - 用于断言集合中多个对象的属性的更好的失败消息