2015-08-20 63 views
1

排序列表中的數據我有一個數字列表,我需要進行排序才能完成不同的計算,並且我注意到.sort()函數正在排序2位數字(10-99)和3位數字(100-999)分別在列表中,所以我最終得到了錯誤的值爲min(),max()和中位數,任何想法爲什麼會發生?使用.sort()

之前排序:

[' 75.0', ' 82.43', ' 112.11', ' 89.93', ' 103.19', ' 80.6', ' 113.44', ' 105.44', ' 95.54', ' 121.98', ' 114.25', ' 109.84', ' 90.48', ' 105.84', ' 82.89', ' 113.64', ' 102.73', ' 104.57', ' 100.83', ' 75.59', ' 79.86', ' 91.11', ' 94.75', ' 109.89', ' 117.39', ' 74.71', ' 71.04', ' 92.97', ' 88.87', ' 92.95', ' 86.67', ' 101.46', ' 92.4', ' 85.2', ' 107.19', ' 117.81', ' 90.95', ' 82.02', ' 87.31', ' 106.53', ' 86.28', ' 106.62', ' 107.57', ' 89.38', ' 105.88', ' 74.45', ' 90.03', ' 107.96', ' 77.42', ' 98.9', ' 109.81', ' 102.51', ' 116.71', ' 82.92', ' 81.78', ' 74.42', ' 76.27', ' 73.84', ' 75.55', ' 102.29', ' 108.1', ' 98.84', ' 101.48', ' 77.75', ' 98.57', ' 70.31', ' 78.28', ' 80.18'] 

和排序

[' 100.83', ' 101.46', ' 101.48', ' 102.29', ' 102.51', ' 102.73', ' 103.19', ' 104.57', ' 105.44', ' 105.84', ' 105.88', ' 106.53', ' 106.62', ' 107.19', ' 107.57', ' 107.96', ' 108.1', ' 109.81', ' 109.84', ' 109.89', ' 112.11', ' 113.44', ' 113.64', ' 114.25', ' 116.71', ' 117.39', ' 117.81', ' 121.98', ' 70.31', ' 71.04', ' 73.84', ' 74.42', ' 74.45', ' 74.71', ' 75.0', ' 75.55', ' 75.59', ' 76.27', ' 77.42', ' 77.75', ' 78.28', ' 79.86', ' 80.18', ' 80.6', ' 81.78', ' 82.02', ' 82.43', ' 82.89', ' 82.92', ' 85.2', ' 86.28', ' 86.67', ' 87.31', ' 88.87', ' 89.38', ' 89.93', ' 90.03', ' 90.48', ' 90.95', ' 91.11', ' 92.4', ' 92.95', ' 92.97', ' 94.75', ' 95.54', ' 98.57', ' 98.84', ' 98.9'] 
+0

你有一個字符串列表,而不是浮點數。 –

回答

7

因爲你有一個字符串列表,所以它在字典序得到分類,如果確認名單隻有浮動後值(在字符串中),使用keys參數將這些字符串在排序時轉換爲浮點。示例 -

l.sort(float) 

如果你要轉換的完整列表浮動(因爲你說你想利用平均/中位數等更高版本),然後使用 -

l = list(map(float, l)) 

對於Python 2.x的,因爲map()返回一個列表,所以不需要列表(..)。

如果你將完整的列表轉換爲float,那麼你不需要上面帶有keys參數的sort()方法,normal .sort()應該可以工作。

+0

好吧,謝謝!仍然是新的python,我認爲它的工作原理相同,因爲我沒有與包含較小數字的其他列表的問題 –

+2

好吧,但是,將列表首先轉換爲浮動不是更好嗎?如果OP將它們作爲字符串離開,它會讓它很難找到最小值,最大值和中位數。 – Kevin

+0

好主意,我也爲此添加了代碼。謝謝:-) –