您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:22:06 python 字数 3606 阅读 557 来源 www.jb51.cc/python

我有一个很大的列表列表,需要根据特定条件删除重复的元素:>唯一性由列表的第一个元素决定.>通过比较重复列表的第二个元素的值来确定删除重复项,即使列表保持最低的第二个元素.[[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实现这一目标吗?

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 OrderedDict

l = [[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 SortedDict

l = [[1,3]]
d = SortedDict()
for sub in l:
    k = sub[0]
    if k not in d or sub[1] < d[k][1]:
        d[k] = sub


print(list(d.values()))

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

总结

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


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶