此问题在此处已有答案:
Fastest union for multiple sorted lists removing duplicates and get an ordered result(3个答案)
2天前关闭。
我想在Python中高效地合并和decuplicate多个列表。有10个列表/pd.Series,每个列表都有大约200 k个 string 元素(它们 * 不 * 具有相同的长度)。每个列表都被排序**。列表有**~90%的重叠元素**。我如何高效地 * 合并它们并删除?
我可以使用下面的代码来实现合并和排序,但是我们有更有效的方法吗?性能在这里很重要。(由于开销,我不喜欢使用Cython)
targetList = list()
for l in lists:
targetList += l
targetList = list(set(targetList))
targetList = targetList.sort()
字符串
我还知道我可以先线性地合并所有列表(顺序保持),然后用散列集线性地去重(实际上这两个步骤可以合并)。
然而,没有内置的函数来进行这样的列表合并,我担心我自己的代码,w/线性复杂度,可能会带来额外的开销,从而变得比具有简单系统内置函数的NlogN算法更慢。
我知道this post用于重复数据删除,但我的问题有许多功能,我认为有优化的空间。
2条答案
按热度按时间k3bvogb11#
您可以尝试使用heapq.merge方法合并排序的可迭代对象,然后应用线性重复数据删除步骤来实现高效的合并和重复数据删除。
字符串
heapq.merge方法避免了创建中间列表,为大型数据集提供了良好的内存效率。总体时间复杂度为O(N * log(k)),其中N是所有列表中的元素总数,k是输入列表的数量
pod7payv2#
您也可以尝试:
字符串
因为,你已经对内部列表进行了排序,只是一个元素接一个元素,你将得到值。
型