2012-12-27 180 views
2

我如何將字符串轉換成int在python 說我有這個數組將字符串轉換成int蟒蛇

['(111,11,12)','(12,34,56)'] to [(111,11,12),(12,34,56)] 

任何幫助將不勝感激感謝

+0

@closevoter:我看不出有任何理由爲什麼這應該也是本地化的,雖然你可以選擇投爲重複 – Abhijit

回答

0

你可以嘗試一些重:

import re 
src = ['(111,11,12)', '(12,34,56)'] 
[tuple([int(n) for n in re.findall(r"(\d+),(\d+),(\d+)", s)[0]]) for s in src] 
+0

非常感謝 – miik

8
import ast 
a = "['(111,11,12)','(12,34,56)']" 
[ast.literal_eval(b) for b in ast.literal_eval(a)] 
# [(111, 11, 12), (12, 34, 56)] 

編輯:如果你有一個字符串列表(而不是字符串),就像@DSM建議,那麼你必須修改它:

a = ['(111,11,12)','(12,34,56)'] 
[ast.literal_eval(b) for b in a] 
# [(111, 11, 12), (12, 34, 56)] 
+1

的OP似乎有一個列表字符串,而不是字符串(修改是微不足道的,當然。) – DSM

+0

EVAL是一件壞事mkay – Goranek

+2

@Goranek'ast.literal_eval'是內置'eval'不同 - 它是完全安全的使用,甚至當處理來自不受信任來源的數據。有關更多信息,請參閱http://docs.python.org/2/library/ast.html#ast-helpers。 – RocketDonkey

-2

您可以將字符串轉換爲int與INT()關鍵字:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> int('42') 
42 

但是你給的例子似乎表明要對整個元組,而不是一個整數做到這一點。如果是這樣,你可以使用內置的eval函數:

>>> eval('(111,111)') 
(111, 111) 
+0

是啊是這樣的話 – miik

+0

-1:你的回答是最有幫助的OP的問題,請不要暗示可怕的EVAL。 – Abhijit

+0

爲什麼eval恐懼? –

0

通過閱讀你的問題,我看你有一個字符串列表:

l = ['(111,11,12)','(12,34,56)'] 

並且您想將其轉換爲數字列表...

# some cleaning first 
number_list = [x.strip('()').split(',') for x in l] 
for numbers in number_list: 
    numbers[:] = [int(x) for x in numbers] 
print number_list 

對不起,列表理解解析,如果你是新的,看起來很奇怪,但是一個非常常見的Python成語,你應該熟悉它。

0

玩得開心!

def customIntparser(n): 
    exec("n="+str(n)) 
    if type(n) is list or type(n) is tuple: 
     temps=[] 
     for a in n: 
      temps.append(customIntparser(str(a))) 
     if type(n) is tuple: 
      temps=tuple(temps) 
     return temps 
    else: 
     exec("z="+str(n)) 
     return z 

樣品測試:

>>>s = "['(111,11,12)','(12,34,56)']" 
>>>a=customIntparser(s) 
>>> a 
# [(111, 11, 12), (12, 34, 56)] 
>a[0][1] 
# 11