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