2012-10-03 101 views
1

Possible Duplicate:
How can I get a list as input from the user in Python?如何將數字轉換爲Python中的數字列表?

目前,我有這樣的:

c = eval(input("Enter a group of numbers ")) 
#say someone types 123 
print (c) 
#prints out 123 

我想這一點:

c = eval(input("Enter a group of numbers ")) 
#say they enter 123 
print (c) 
#prints out [1,2,3] 

我想123到最終成爲[1,2,3]。我怎樣才能做到這一點?

+2

不要使用'eval'。另外,如果你使用python 2,不要使用'input'。兩者都會導致任意代碼執行漏洞。 –

+0

我知道每個人都喜歡簡單的代表,但對於質量問答,真正需要關閉常見問題,而不是每次都回答十幾個相同的答案。 – Junuxx

回答

6
In [32]: c=raw_input() 
123 

In [33]: map(int,c) 
Out[33]: [1, 2, 3] 

使用split()如果輸入的是一樣的東西1 2 3

In [37]: c=raw_input() 
1 2 3 

In [38]: map(int,c.split()) 
Out[38]: [1, 2, 3] 
4

您可以將數字轉換成int S使用map()

>>> map(int, '123') 
[1, 2, 3] 
4
>>> s = '123' 
>>> [int(c) for c in s] 
[1, 2, 3] 
1

怎麼樣?:

c = [int(x) for x in input("Enter a group of numbers ")] 
#list comprehension over the input function 

輸入123中的結果是[1,2,3]

行,可以說,對於蟒2.X(輸入返回int對象)

c = [int(x) for x in str(input("Enter a group of numbers "))] 
#added an str() function for iterating 
+0

這將無法在Python 2.x –

+0

U SIR IS GENIUS它工作! –

+0

@AshwiniChaudhary:會的。我只是用Python 2.6測試它。 – Blender

0

你可以轉換它轉換爲字符串,然後將字符串中的每個字符轉換爲數字。

 

myStr = str(myInt) 
out = [int(i) for i in myStr] 
 
0

首先,如下:

c = eval(input("Enter a group of numbers ")) 

是一樣的:

c = eval(eval(raw_input("Enter a group of numbers "))) 

所以你現在兩次調用eval。有關input的更多信息,請參見here

這是你想要的一個可能的解決方案:

c = raw_input("Enter a group of numbers ")) 
c = [int(i) for i in c] 
print(c) 

當然你可以減少上面的例子中,以兩行(甚至一個實際上)。

0

您不應該在用戶輸入上一般使用eval。有人可以輸入一個可能導致惡作劇的陳述。

出於同樣的原因,你應該避免使用input(),因爲它相當於eval(raw_input())也可能導致惡作劇 - 意圖與否。

你可以,但是,安全到達用戶輸入的Python解釋成Python數據結構與ast.literal_eval

>>> import ast 
>>> ast.literal_eval(raw_input('Type Python input: ')) 
Type Python input: 1,2,3 
(1, 2, 3) 
>>> ast.literal_eval(raw_input('Type Python input: ')) 
Type Python input: [1,2,3] 
[1, 2, 3] 
>>> ast.literal_eval(raw_input('Type Python input: ')) 
Type Python input: 123 
123 
>>> ast.literal_eval(raw_input('type a number: ')) 
type a number: 0xab 
171 

(在每種情況下,>>> Type Python input:後的第一行是我鍵入到raw_input()

如果你想要來拆分數字,你可以這樣做:

>>> [int(c) for c in raw_input() if c in '1234567890'] 
1234 
[1, 2, 3, 4] 
>>> [int(c) for c in raw_input() if c in '1234567890'] 
123a45 
[1, 2, 3, 4, 5] 

公告非數字是FIL tered。

相關問題