2015-02-13 6 views
1

У меня есть строка, как groups(1,12,23,12), и я хочу преобразовать ее в список, например [1,12, 23, 12].Python: - Преобразование строки в список

Я пробовал этот код, но вывод не такой, как исключение.

str = 'groups(1,12,23,12)' 
lst = [x for x in str] 

Пожалуйста, дайте мне знать ...!

ответ

1
  1. Использование регулярных выражений для поиска чисел из строки ввода.
  2. Использование метода карты для преобразования строки в целое.

, например.

>>> import re 
>>> a = 'groups(1,12,23,12)' 
>>> re.findall("\d+", a) 
['1', '12', '23', '12'] 
>>> map(int, re.findall("\d+", a)) 
[1, 12, 23, 12] 
4

Вы можете использовать метод re.findall.

И не используйте str как переменное имя.

>>> import re 
>>> s = 'groups(1,12,23,12)' 
>>> re.findall(r'\d+', string) 
['1', '12', '23', '12'] 
>>> [int(i) for i in re.findall(r'\d+', s)] 
[1, 12, 23, 12] 

Без регулярных выражений,

>>> s = 'groups(1,12,23,12)' 
>>> [int(i) for i in s.split('(')[1].split(')')[0].split(',')] 
[1, 12, 23, 12] 
+1

хороший вопрос. Обновлено ... –

+1

Использование строки в качестве имени переменной также является плохой идеей :-) – thiruvenkadam

+0

Могу я знать, почему ??? –

3

Для подхода без регулярных выражений

>>> a = "groups(1,12,23,12)" 
>>> a= a.replace('groups','') 
>>> import ast 
>>> list(ast.literal_eval(a)) 
[1, 12, 23, 12] 

Ref:

+2

Преимущество этого над регулярным выражением состоит в том, что он будет работать с любым типом числа, например. '1e4',' 1.99', '0x9' и т. Д., И это даже будет работать для любой другой строки типа, dict и т. Д. Я думаю, что это лучший подход, общее правило - всегда избегать регулярного выражения, где это возможно, а также – jamylak

+0

@jamylak Благодаря ... –

0
string = "groups(1,12,23,12)".replace('groups(','').replace(')','') 
outputList = [int(x) for x in string.split(',')] 
Смежные вопросы