我创建了这段代码,用户输入一个整数字符串。我正在尝试编写一个循环来查找de list中的第二个最小数字。我该如何完成?
numbers_input = raw_input('Insert numbers seperated by a space')
numbers_strings = numbers_input.split()
numbers_list = map(int, numbers_strings)
for x in numbers_list:
答案 0 :(得分:1)
它是heapq.nsmallest
的用途:
>>> import heapq
>>> l=[10, 12, 2, 2, 5 ,15]
>>> print(heapq.nsmallest(2, set(l))) [1]
5
请注意,set(l)
用于删除重复索引!(感谢Jon Clements提醒评论)
此外,您可以使用sorted(iterable)[:n][1]
查找{{1>}给出最小索引的第二小!
堆的最重要特征是sorted(iterable)[:n]
始终是最小的项目。更多-
结束后,可以使用heap[0]
方法轻松找到后续项目
弹出第一个项目并将其替换为下一个最小的项目(一个操作
需要O(log N)操作,其中N是堆的大小)
heapq.heappop()
的nsmallest