说我有一个列表如:
[(3,4), (4,3), (1,5), (5,1), (2,6), (6,2)]
我希望返回具有最低x值的元组,以及具有最低y值的元组。
是否可以使用索引0构建(min-)堆,使用索引1构建不同的堆?这会产生两堆:
for x: [(1,5), (2,6), (3,4), (4,3), (5,1), (6,2)]
#and
for y: [(5,1), (6,2), (4,3), (3,4), (1,5), (2,6)].
我们可以使用heapsort作为元组吗?
答案 0 :(得分:3)
答案是肯定的,你可以在元组上使用heapsort:
堆元素可以是元组。这对于在跟踪的主记录旁分配比较值(例如任务优先级)非常有用......
但是mentioned in the docs也是{<3}}:
[nsmallest和nlargest]对较小的n值表现最佳。对于较大的值,使用sorted()函数更有效。此外,当n == 1时,使用内置的min()和max()函数效率更高。
也就是说,如果您想要最小y,请使用min
:
tuple_list = [(3,4), (4,3), (1,5), (5,1), (2,6), (6,2)]
min(tuple_list, key=lambda x: x[1])
# (5,1)
如果您想对整个列表进行排序,请使用sorted
:
sorted(tuple_list, key=lambda x: x[1])
# [(5,1), (6,2), (4,3), (3,4), (1,5), (2,6)]
如果您想使用三个最小值,请使用heapq.nsmallest
:
heapq.nsmallest(3, tuple_list, key=lambda x: x[1])
# [(5,1), (6,2), (4,3)]