【发布时间】:2018-08-25 00:01:31
【问题描述】:
给定一个 2 元组列表 [(b,(x,y))],它在每次迭代循环时都会被操作(list.remove 和 list.append)。在每次迭代中,都会请求并删除最小的数字。目前我使用min(list) 在每次迭代中找到具有最小b 的元组。
对于大型数据集,该算法的表现相当缓慢。在每次迭代中操作的列表中找到最小值的最佳方法是什么?
【问题讨论】:
-
嗨,你有一小段代码来说明特定的用例吗?例如,如果您一次添加/删除一个元素,那么计算一次最小值然后检查最小值与您删除/添加的内容的比较会快得多。
-
是的,我也想过这个问题,但在每次迭代中都会删除最小值。在排序列表中,我可以取第二小的元素,但我不知道排序是否有效
-
一个选项是使用堆来管理值。 Python 有一个带有
heapq模块的标准实现。然后heappop(q)总是会弹出最小值。而heappush(q, (b, (x, y)))会将新值推入堆中。 -
你必须保持列表的顺序吗?
-
不,我只需要在每次迭代中选择并删除列表中的最小数字,然后将
n数字添加到列表中
标签: python-3.x list loops tuples min