从列表中删除对某些项目重复的列表

发布于 2021-01-29 14:59:52

我正在尝试从具有相同的第一项和第三项但仅保留第一项的列表中删除列表。示例列表和输出:

li=[ [2,4,5], [1,3,5], [1,6,5] ]
output_list = [ [2,4,5], [1,3,5] ]

由于原始列表包含数百万个列表,因此我编写的代码需要很长时间才能执行。

b_li = []
output_list = []
for x in li:
    s = [ x[0], x[2] ]
    if s not in b_li:
        b_li.append(s)
        output_list.append(x)

如何改善代码?提前致谢。

关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    改进的版本:

    b_li = set()
    output_list = []
    b_li_add = b_li.add
    output_list_append = output_list.append
    for x in li:
        s = (x[0], x[2])
        if s not in b_li:
            b_li_add(s)
            output_list_append(x)
    

    更改为:

    • 使用set()b_li,这使得查找更快。
    • s成元组,因为没有必要存储唯一的第一和第三元素列表。
    • 减少的函数查找也可以加快代码的速度。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看