python - 如何从三维列表中删除重复项?
问题描述
我在编写哪些代码允许我通过使用列表理解从三维列表中删除重复项时遇到一些问题?这是我下面的列表和示例。
df = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 17, 28],[7, 25, 27, 28], [7, 17, 21, 27, 28]],[[3, 4, 28],[4, 7, 28],[4, 7, 28],[3, 4, 28],[4, 7, 14, 28],[3, 14, 28],[3, 4, 28],[3, 7, 14, 28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28],[7, 11, 12, 28],[3, 11, 12, 28],[7, 25, 27, 28],[3, 7, 11, 28]]]
我希望我的结果是:
df1 = [[[3, 7, 9, 28],[3, 7, 17, 28],[7, 25, 27, 28],[7, 17, 21, 27, 28]],[[3, 4, 28],[4, 7, 28],[4, 7, 14, 28],[3, 14, 28],[3, 7, 14, 28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28],[7, 11, 12, 28],[3, 11, 12, 28],[3, 7, 11, 28]]]
解决方案
您可以通过在插入列表之前检查列表是否已经存在来避免这种混乱。这样可以避免复杂的循环。
编辑:我知道这不是您直接想要的,但我认为不需要列表理解。更容易继续执行以下操作:
EDIT2:根据要求添加了排序版本。使用每个 2d 列表的索引位置作为键,并使用列表的 .sort() 功能对它们进行排序。
res = []
for dflist in df:
df_set = set(tuple(y) for y in dflist)
innerlist = [list(x) for x in df_set]
innerlist.sort(key = lambda x: dflist.index(x))
res.append(innerlist)
推荐阅读
- regex - 正则表达式检查至少 8 位数字和正好 2 个字符
- android - 无法在 android studio 中创建 aab 更新版本
- c# - 如何使用 C# 仅从多级嵌入式 MongoDB 文档中获取具有相应父级的确切子元素
- java - 泛型和“未经检查地调用‘add(E)’作为原始类型‘java.util.ArrayList’的成员”
- python - 在两个 Textinput 动态数组中添加更多值并在同一屏幕中获取标签中的总和,
- python - index of N highest elements from a list of numpy array
- mysql - 保持多对多项目顺序的数据结构
- php - 错误消息指出:“此路由不支持 GET 方法。支持的方法:POST”在更新时使用 Laravel
- php - SQL 从两个表中选择数据,一行 -> 多行
- deployment - 我如何将项目的输出包含在之后构建的项目的 msbuild 部署中