一尘不染

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

python

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

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)

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


阅读 159

收藏
2021-01-20

共1个答案

一尘不染

改进的版本:

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成元组,因为没有必要存储唯一的第一和第三元素列表。
  • 减少的函数查找也可以加快代码的速度。
2021-01-20