gpt4 book ai didi

python - 快速删除列表中的连续重复项和另一个列表中的相应项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:58 25 4
gpt4 key购买 nike

我的问题与此类似previous SO question .我有两个非常大的数据列表(将近 2000 万个数据点),其中包含许多连续的重复项。我想按如下方式删除连续的重复项:

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), 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

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

最佳答案

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]

您可以使用 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)]

如果您想再次将这些对拆分回单独的序列:

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

关于python - 快速删除列表中的连续重复项和另一个列表中的相应项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41511555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com