【发布时间】:2016-08-24 14:38:33
【问题描述】:
我想知道如何在数字列表中找到前 3 或 4 个最小的数字,而无需对列表进行排序且不删除元素。我在下面找到了一些代码,可以很好地找到前 2 个最小的数字(分钟):
def second_smallest(numbers):
m1, m2 = float('inf'), float('inf')
for x in numbers:
if x <= m1:
m1, m2 = x, m1
elif x < m2:
m2 = x
return m2
然而,我很难修改代码来给我第三小或第四小的数字。下面是我修改后的代码,它有时似乎有效,但并非一直有效:
m1, m2, m3= float('inf'), float('inf'), float('inf')
for x in min_of_summed_vals:
if x < m1:
m1, m2 = x, m1
elif x < m2:
m2 = x
elif x > m2 and x < m3:
m3 = x
有什么建议吗?
【问题讨论】:
-
您是否考虑过通过遍历列表 n 次来找到第 n 个最小的数,对于前 n-1 次,删除最小的数?在第 n 次循环中,最小的项是原始列表的第 n 小数。
标签: list loops for-loop numbers min