【发布时间】:2020-02-04 21:57:03
【问题描述】:
我在编写哪些代码以允许我通过使用列表理解从三维列表中删除重复项时遇到一些问题?下面是我的列表和示例。
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]]]
【问题讨论】:
-
为什么需要它作为列表理解?这将是非常低效的,因为您必须多次迭代 df 列表以搜索它是否是在插入它之前的第一次出现。如果您使用集合来存储已插入的元素并使用普通循环,您将获得更有效的解决方案。
-
[3, 7, 11, 28]怎么样?存在列表推导以简化工作。但在这种情况下,我认为它们弊大于利,因为代码看起来非常复杂。 -
旁注:如果
[3, 7, 9, 28]代表什么,它们可能应该是某种自定义对象而不是列表。class和__slots__在内存方面应该是有效的。如果您需要对代码的其他部分进行迭代,则可以为类提供迭代功能。使用列表、元组和字典来存储我闻到的所有东西。 -
那么,如果不能通过列表理解来完成,我该如何让它工作
-
我已经给了你同样的答案。
标签: python python-3.x list multidimensional-array duplicates