2024-04-20 01:31:49 发布
网友
我试图从一个列表中删除第一项和第三项相同但只保留第一项的列表。示例列表和输出:
li=[ [2,4,5], [1,3,5], [1,6,5] ] output_list = [ [2,4,5], [1,3,5] ]
我编写的代码需要很长时间才能执行,因为原始列表包含数百万个列表。在
如何改进代码?提前谢谢。在
利用OrderedDict和字典具有唯一键这一事实。在
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]]
使用集合存储可见元素。速度更快:
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]]
添加
另外,花在思考告诉变量名称上的时间通常是很好的。通常情况下,作为一次性解决方案,事情会比预期的持续时间长得多。在
改进版:
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
利用
OrderedDict
和字典具有唯一键这一事实。在使用集合存储可见元素。速度更快:
添加
另外,花在思考告诉变量名称上的时间通常是很好的。通常情况下,作为一次性解决方案,事情会比预期的持续时间长得多。在
改进版:
变化包括:
set()
使用b_li
,这样可以加快查找速度。在s
转换为元组,因为不需要将唯一的第一和第三个元素存储为列表。在相关问题 更多 >
编程相关推荐