2016-04-24 121 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