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

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


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)

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


隔江千里
浏览 162回答 3
3回答

MMTTMM

改进的版本:b_li = set()output_list = []b_li_add = b_li.addoutput_list_append = output_list.appendfor 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成元组,因为没有必要存储唯一的第一和第三元素列表。减少的函数查找也可以加快代码的速度。

汪汪一只猫

使用一组存储可见的元素。那是更快的:seen = set()res = []for entry in li:    cond = (entry[0], entry[2])    if cond not in seen:        res.append(entry)        seen.add(cond)[[2, 4, 5], [1, 3, 5]]添加同样,花费在思考告诉变量名称上的时间通常是合理的。通常,作为一次性解决方案的第一件事要比预期持续更长的时间。

阿波罗的战车

利用OrderedDict字典具有唯一键的事实。>>> from collections import OrderedDict>>> li=[ [2,4,5], [1,3,5], [1,6,5] ]>>> OrderedDict(((x[0], x[2]), x) for x in reversed(li)).values()[[1, 3, 5], [2, 4, 5]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python