【发布时间】:2020-05-08 23:33:49
【问题描述】:
我有一个嵌套列表,其结构如下:
mylist = [['A', 'Car', '15'], ['A', 'Car', '15'], ['A', 'Plane', '16'], ['A', 'Bike', '20'], ['A', 'Car', '16'], ['A', 'Boat', '16']]
它超长,大约有 1000 万个元素。我有很多这样的清单。我想做的是:
如果mylist 中每个连续元素的第三项(字符串编号)重复,则删除包含此重复的元素。
例如:
['A', 'Car', '15']和['A', 'Car', '15']是mylist的连续元素,它们都包含'15',所以它们是连续重复的,应该删除一个。
同样,['A', 'Car', '16'] 和['A', 'Boat', '16'] 是连续的,并且都包含'16',所以应该删除一个。
所以,我最终的结果是:
newlist = [['A', 'Car', '15'], ['A', 'Plane', '16'], ['A', 'Bike', '20'], ['A', 'Car', '16']]
我最初是这样写的:
for ele in mylist:
eleindex = mylist.index(ele)
previousele = mylist[eleindex-1]
if float(ele[2]) != float(previousele[2]):
newlist.append(ele)
不幸的是,我编写的代码对于这么长的列表来说太长了。因此,我开始在网上查找并了解到 itertools 库(使用 groupby)非常有用,并且在做这些事情时非常快。然后我找到了一些我尝试模仿的示例,但是,它们主要用于简单列表 - 不像我的情况那样复杂一点。在修补之后,我无法弄清楚如何将它用于我的嵌套列表。
那么,有谁知道如何快速做到这一点?另外,如果您有比itertools 更快的解决方案,那就更好了!
【问题讨论】:
标签: python-3.x list performance group-by itertools