2017-10-06 24 views
3

我試圖使用Visual Studio對Python 3中的列表進行排序代碼: 我從命令行中的參數中獲取我的列表。第一個參數被忽略,這是我的針變量。 添加完所有變量後,我想對列表進行排序。 的問題是,它得到一個相當奇怪的方式排序2配備21 python3帶.sort()的列表出錯

然後來到後3 5 55比6

這是我的命令行:

C:\Users\Gebruikertje\Desktop\Python>python find.py 21 2 3 4 5 6 21 55 3 

這是輸出:

['2', '21', '3', '3', '4', '5', '55', '6'] 

這是代碼IM參照

的部分
import sys 

finish = len(sys.argv) 
needle = sys.argv[1] 
haystack = [] 
for i in range (2,finish): 
    haystack.append(sys.argv[i]) 
haystack.sort() 
print(haystack) 
+1

要排序的字符串(不是整數)的列表,嘗試'haystack.sort (key = lambda x:int(x))'或者只是讓列表整數以 –

+0

開頭這是因爲數字是字符串。用整數嘗試相同的代碼。 – Eduardo

+0

@Chris_Rands嗯...這可能只是'key = int' ... –

回答

2

您正在嘗試對字符串列表進行排序。

將它們轉換爲int,同時將它們添加到列表

haystack.append(int(sys.argv[i])) 

您還可以使用map()這裏:

haystack = map(int, sys.argv[1:]) 
+1

非常感謝。 這正是問題所在。在Python領域向前邁進了一步 – zorange

1

argv inputed的值是字符串,因此被字典順序排序。如果你想用數字排序,你應該將它們轉換爲數字。在列表理解這樣做還可以幫助清理從環路一些鍋爐板:

haystack = [int(x) for x in sys.argv[1:]] 
haystack.sort() 
1

嘗試:

x = ['2', '21', '3', '3', '4', '5', '55', '6'] 
y = [int(number) for number in x] 
y.sort() 

# Result = [2, 3, 3, 4, 5, 6, 21, 55]