2016-04-24 87 views
3

我正在尝试编写一个函数,用于删除最低数字,然后平均列表中剩余的数字。有没有办法在不使用sorted()sort()的情况下从列表中删除最低的两个或更多数字?像使用min()range()结合使用。从列表中删除最低数字

我有什么至今:

lst = [90, 100, 95, 95] 
lst.remove(min(lst)) 
print(sum(lst)/len(lst)) 
+1

鉴于存在排在第二低的数字,你甚至期待的输出是什么? – jonrsharpe

+0

只是数字的平均值。删除90和平均余下的数字让我97.5。 –

+0

移除2个最小数字后,'lst'应该包含什么? – vaultah

回答

2

list.remove运行它删除第一在列表中匹配的值。为了删除当前最小号码的所有事件,您必须将其称为list.count(min(list))次。

下面是从lst删除n最小号的功能,不涉及list.remove

def remove_n_smallest(lst, n): 
    for _ in range(n): 
     m = min(lst) 
     lst[:] = (x for x in lst if x != m) 

这里是为lst从你的问题的例子:

>>> remove_n_smallest(lst, 2) 
>>> lst 
[100] 
>>> sum(lst)/len(lst) 
100.0 
+0

谢谢!现在我遇到了一些麻烦实施。当我运行代码时,它不会打印任何东西。 –

+0

@DA_F:你是否执行过函数定义_and_下面的例子? – vaultah

+0

我得到它的工作!我非常感谢你的帮助! –

0

,我只想通过一个循环

>>> lst = [90,100,95,95] 
>>> for i in range(0, 1):   # This removes n=1 items 
...  lst.remove(min(lst)) 
... 
>>> lst 
[100, 95, 95] 
>>> lst = [90,100,95,95] 
>>> for i in range(0, 2):   # This removes n=2 items 
...  lst.remove(min(lst)) 
... 
>>> lst 
[100, 95] 
+1

因为'list.remove'不会删除第二次出现的95. – vaultah