python– 根据内部列表元素的比较从列表列表中删除重复项

python– 根据内部列表元素的比较从列表列表中删除重复项,第1张

概述我有一个很大的列表列表,需要根据特定条件删除重复元素:>唯一性由列表的第一个元素决定.>通过比较重复列表的第二个元素的值来确定删除重复项,即使列表保持最低的第二个元素.[[1,4,5],[1,3,4],[1,2,3]]以上所有列表都被认为是重复的,因为它们的第一个元素是相同的.需要保留第三个列表,因为它的第二个元素是最小的.请注意,实际的列表列

我有一个很大的列表列表,需要根据特定条件删除重复的元素:

>唯一性由列表的第一个元素决定.
>通过比较重复列表的第二个元素的值来确定删除重复项,即使列表保持最低的第二个元素.

[[1,4,5],[1,3,4],2,3]]

以上所有列表都被认为是重复的,因为它们的第一个元素是相同的.需要保留第三个列表,因为它的第二个元素是最小的.请注意,实际的列表列表有超过400万个元素,是双重排序的,需要保留排序.

该列表首先根据内部列表的第二个元素以反向(降序)顺序排序,然后是基于第一个元素的正常(升序)顺序:

sorted(sorted(the_List,key=itemgetter(1),reverse=True),key=itemgetter(0))

实际排序中三个重复列表的示例:

[...[33554432,50331647,1695008306],[33554432,34603007,1904606324],33554687,2208089473],...]

目标是准备二等分搜索列表.有人能让我了解如何使用Python实现这一目标吗?最佳答案您可以使用dict对元素进行分组,始终使用较小的第二个元素保留子列表:

l = [[1,3],[2,5,6],1,3]]d = {}for sub in l:    k = sub[0]    if k not in d or sub[1] < d[k][1]:        d[k] = sub

您也可以传递两个键进行排序,您不需要调用两次排序:

In [3]:  l = [[1,6,2],5]]In [4]: sorted(l,key=lambda x: (-x[1],x[0]))Out[4]: [[1,6]]

如果你想维护dict中的顺序,则需要保留订单:

from collections import OrderedDictl = [[1,3]]d = OrderedDict()for sub in l:    k = sub[0]    if k not in d or sub[1] < d[k][1]:        d[sub[0]] = sub

但是不确定这样做是否合适,因为您将丢失任何订单后对数据进行排序.

您可能会发现非常有用的是sortedcontainers.sorteddict:

A SortedDict provIDes the same methods as a dict. Additionally,a SortedDict efficIEntly maintains its keys in sorted order. Consequently,the keys method will return the keys in sorted order,the popitem method will remove the item with the highest key,etc.

An optional key argument defines a callable that,like the key argument to Python’s sorted function,extracts a comparison key from each dict key. If no function is specifIEd,the default compares the dict keys directly. The key argument must be provIDed as a positional argument and must come before all other arguments.

from sortedcontainers import SortedDictl = [[1,3]]d = SortedDict()for sub in l:    k = sub[0]    if k not in d or sub[1] < d[k][1]:        d[k] = subprint(List(d.values()))

它有你想要的所有方法bisect,bisect_left等. 总结

以上是内存溢出为你收集整理的python – 根据内部列表元素的比较从列表列表中删除重复项全部内容,希望文章能够帮你解决python – 根据内部列表元素的比较从列表列表中删除重复项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1206466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存