2016-04-24 13 views
3

私は、最も低い数字を削除して、残りの数字を平均する関数を書こうとしています。 sorted()またはsort()を使用せずに、リストから最低の2つ以上の数字を削除する方法はありますか? min()range()を組み合わせて使用​​するように。私がこれまで持って何リストから一番低い数字を削除する

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

があることを考えます2番目に低い数字のネクタイ、あなたが期待しているアウトプットは何ですか? – 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:以下の例の関数定義を実行しましたか? – 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の2番目の出現を削除しないため、 – vaultah

関連する問題