快速删除连续重复的python

Dil*_*ark 3 python duplicates

我的问题类似于之前的SO问题, 我有两个大的数据列表(近1.2亿个数据点),包含许多连续的重复项.我想删除连续的副本如下

list1 = [1,1,1,1,1,1,2,3,4,4,5,1,2] #This is 20M long!
list2 =[another list of size len(list1)]#This is also 20M long!
i = 0
while i < len(list)-1:
    if list[i] == list[i+1]:
        del list1[i]
        del list2[i]
    else:
        i = i+1
Run Code Online (Sandbox Code Playgroud)

输出应该是[1,2,3,4,5,1,2],不幸的是,这非常慢,因为删除列表中的元素本身就是一个缓慢的操作.有什么方法可以加快这个过程吗?请注意,如上面的代码所示,我也需要跟踪索引i,以便我可以删除list2中的相应元素.

wim*_*wim 7

Python groupby在你的库中有这个:

>>> list1 = [1,1,1,1,1,1,2,3,4,4,5,1,2]
>>> from itertools import groupby
>>> [k for k,_ in groupby(list1)]
[1, 2, 3, 4, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

您可以使用keyfunc参数调整它,以便同时处理第二个列表.

>>> list1 = [1,1,1,1,1,1,2,3,4,4,5,1,2]
>>> list2 = [9,9,9,8,8,8,7,7,7,6,6,6,5]
>>> from operator import itemgetter
>>> keyfunc = itemgetter(0)
>>> [next(g) for k,g in groupby(zip(list1, list2), keyfunc)]
[(1, 9), (2, 7), (3, 7), (4, 7), (5, 6), (1, 6), (2, 5)]
Run Code Online (Sandbox Code Playgroud)

如果要将这些对再次拆分为单独的序列:

>>> zip(*_)  # "unzip" them
[(1, 2, 3, 4, 5, 1, 2), (9, 7, 7, 7, 6, 6, 5)]
Run Code Online (Sandbox Code Playgroud)