2014-12-05 29 views
1

我想在python代碼中使用raw_input來獲取列表的用戶輸入,如下所示。在python中使用raw_input作爲列表

input_array.append(list(raw_input())); 

用戶輸入:

1 2 3 5 100 

但是代碼解釋輸入作爲

[['1', ' ', '2', ' ', '3', ' ', '5', ' ', '1', '0', '0']] 

嘗試:如果我使用的普通input()代替raw_input(),我對着在控制檯中的問題。

"SyntaxError: ('invalid syntax', ('<string>', 1, 3, '1 2 3 4 100'))" 

注:我不能給以列表格式輸入像

[1,2,3,5,100] 

可能有人請告訴我如何進一步進行。

+1

這數據看起來你喜歡用空格分隔的數字,但對計算機,它只是個字符(這恰好是十進制數字和空格)的字符串。當你將它轉換爲列表時,Python認爲你需要一個包含字符串中每個單獨字符的列表。你想要的是將字符串分隔成更短的子字符串,使用空格作爲分隔符;然後,將每個子字符串轉換爲一個整數並放入一個列表中。這就是下面的答案。 – 2014-12-05 03:52:49

回答

6
>>> [int(x) for x in raw_input().split()] 
1 2 3 5 100 
[1, 2, 3, 5, 100] 

>>> raw_input().split() 
1 2 3 5 100 
['1', '2', '3', '5', '100'] 

由空格創建一個新的列表分割,然後

[int(x) for x in raw_input().split()] 

在這個新的列表中的每個字符串轉換爲一個整數。


list() 

的是通過字符串從一個可迭代如

>>> list({1, 2, 3}) # constructs list from a set {1, 2, 3} 
[1, 2, 3] 
>>> list('123') # constructs list from a string 
['1', '2', '3'] 
>>> list((1, 2, 3)) 
[1, 2, 3] # constructs list from a tuple 

所以

>>> list('1 2 3 5 100') 
['1', ' ', '2', ' ', '3', ' ', '5', ' ', '1', '0', '0'] 

也工作構造的列表,所述list函數進行迭代,並且追加每一個功能字符添加到新列表中。但是,您需要用空格分隔,因此list函數不適用。

input接受一個字符串,並將其轉換爲對象

'1 2 3 5 100' 

不是有效的Python對象,它是由空格隔開5個號碼。 爲了清楚起見,請考慮輸入

>>> 1 2 3 5 100 
SyntaxError: invalid syntax 

到Python Shell中。這只是無效的語法。所以input也引發了這個錯誤。

上的一個重要側面說明: input不是一個安全功能使用,因此即使你的字符串是'[1,2,3,5,100]'正如你所說,你不應該使用input,因爲有害的Python代碼可以通過input執行。 如果這種情況出現過,使用ast.literal_eval

>>> import ast 
>>> ast.literal_eval('[1,2,3,5,100]') 
[1, 2, 3, 5, 100]