2011-03-06 2 views
3

У меня есть строка, которая представляет собой список:Преобразование строки, которая представляет собой список, в реальный объект списка

"[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]" 

Я хотел бы, чтобы превратить эту litteral строки в список фактического. Я предполагаю, что можно было бы повторно выставлять числа и перебирать их (append()), но есть ли более простой способ? Не знаю, как бы это сделать как регулярное выражение.

+1

Сходство есть * много * способов сделать это. Эта страница целиком должна иметь галочку «принять ответ». Держите их. – Flowpoke

ответ

2

Если текущая строка

s = "[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]" 

, то это будет делать трюк:

[int(n) for n in s[1:-1].split(', ')] 
4

Еще один способ:

import json 
x=json.loads("[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]") 
1

Попробуйте это:

sl = "[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]" 
sl = sl.lstrip('[') 
sl = sl.rstrip(']') 
sl = sl.split(',') 

Уродливые и взломанные, но это сработает!

+2

уродливый, взломанный и доставляет список объектов 'str' - должен быть объектами' int' –

+0

В моем случае у меня есть ';' -сепаратированные значения в строке, так что это выглядит так, как я могу это сделать , Я имею в виду, с 'split'. 'ast.literal_eval' не поддерживает никаких манипуляций такого рода. –

0

Вы можете использовать встроенный в evalhttp://docs.python.org/library/functions.html#eval

>>> lst = eval("[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]") 
>>> type(lst) 
<type 'list'> 
>>> lst[0] 
22 
Смежные вопросы