Как преобразовать строку в список в Python? - PullRequest
86 голосов
/ 22 марта 2011

Как конвертировать строку в список?

Скажите, что строка похожа на text = "a,b,c". После конвертации text == ['a', 'b', 'c'] и, надеюсь, text[0] == 'a', text[1] == 'b'?

Ответы [ 12 ]

146 голосов
/ 22 марта 2011

Например:

>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]

В качестве альтернативы вы можете использовать eval(), если доверяете строке, чтобы она была безопасной:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')
121 голосов
/ 15 июля 2012

Просто добавим к уже существующим ответам: надеюсь, в будущем вы столкнетесь с чем-то похожим:

>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'

Но с чем вы сейчас имеете дело , ответьте на вопрос @ Кэмерон .

>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
28 голосов
/ 22 мая 2012

Следующий код Python превратит вашу строку в список строк:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)
14 голосов
/ 18 сентября 2014

Я не думаю, что вам нужно до

В Python вам редко требуется преобразовывать строку в список, потому что строки и списки очень похожи

Изменение типа

Если у вас действительно есть строка, которая должна быть массивом символов, сделайте следующее:

In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']

без изменения типа

Обратите внимание, что строки очень похожи на списки в python

Строки имеют методы доступа, например списки

In [3]: x[0]
Out[3]: 'f'

Строки являются итеративными, как списки

In [4]: for i in range(len(x)):
...:     print x[i]
...:     
f
o
o
b
a
r

TLDR

Строки являются списками. Почти.

7 голосов
/ 22 марта 2011

Если вы действительно хотите массивы:

>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'

Если вам не нужны массивы, и вы хотите просматривать только символы по индексу, помните, что строка является итеративной, как список, за исключением того факта, что она неизменна:

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'
4 голосов
/ 12 апреля 2015

Если вы хотите разделить пробелы, вы можете просто использовать .split():

a = 'mary had a little lamb'
z = a.split()
print z

Выход:

['mary', 'had', 'a', 'little', 'lamb'] 
1 голос
/ 26 октября 2017
m = '[[1,2,3],[4,5,6],[7,8,9]]'

m= eval(m.split()[0])

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
1 голос
/ 21 апреля 2017

Чтобы преобразовать string в форме a="[[1, 3], [2, -6]]" Я написал еще не оптимизированный код:

matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
    row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
    matrixAr.append(row)
print matrixAr
1 голос
/ 22 марта 2011

Я обычно использую:

l = [ word.strip() for word in text.split(',') ]

strip удаляет пробелы вокруг слов.

0 голосов
/ 08 декабря 2018

Все ответы хорошие, есть другой способ, который заключается в понимании списка, см. Решение ниже.

u = "UUUDDD"

lst = [x for x in u]

для списка через запятую сделайте следующее

u = "U,U,U,D,D,D"

lst = [x for x in u.split(',')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...