2013-04-23 2 views
0

У меня есть список:список строк в список кортежей Интс

['(128, 134)', '(134, 146)', '(134, 150)', '(137, 143)', '(137, 146)', '(137, 150)', '(143, 150)']

Я хочу, чтобы включить в список кортежей Интс так что этот список будет:

[(128, 134), (134, 146), (134, 150), (137, 143), (137, 146), (137, 150), (143, 150)]

ответ

3

Вы можете использовать literal_eval из ast, который будет безопасно оценивать строку как выражение Python.

>>> a = ['(128, 134)', '(134, 146)', '(134, 150)', '(137, 143)', '(137, 146)', '(137, 150)', '(143, 150)'] 
>>> from ast import literal_eval 
>>> map(literal_eval, a) 
[(128, 134), (134, 146), (134, 150), (137, 143), (137, 146), (137, 150), (143, 150)] 
+0

к сведению, что в Python 3 вам нужно 'список (карта (literal_eval, а))' – jamylak

3
>>> import ast 
>>> L = ['(128, 134)', '(134, 146)', '(134, 150)', '(137, 143)', '(137, 146)', '(137, 150)', '(143, 150)'] 
>>> [ast.literal_eval(s) for s in L] 
[(128, 134), (134, 146), (134, 150), (137, 143), (137, 146), (137, 150), (143, 150)] 
0
def to_tuple(x): 
    ints = x.strip('()').split() 
    return tuple(int(m.strip(',')) for m in ints) 

print [to_tuple(a) for a in aa] # where aa is your string 
0
import re 
l=['(128, 134)', '(134, 146)', '(134, 150)', '(137, 143)', '(137, 146)', '(137, 150)', '(143, 150)'] 
t = [ tuple(map (int, re.findall("\d+", v))) for v in l ] 
print t 
+0

Это сделает кортежей строк, не of ints. –

+0

Спасибо, обновил ответ – perreal

0
>>> L = ['(128, 134)', '(134, 146)', '(134, 150)', '(137, 143)', '(137, 146)', '(137, 150)', '(143, 150)'] 
>>> [tuple(map(int, s.strip('()').split(', '))) for s in L] 
[(128, 134), (134, 146), (134, 150), (137, 143), (137, 146), (137, 150), (143, 150)] 
Смежные вопросы