Як перетворити рядок із розділеними комами елементами до списку в Python?


140

Як перетворити рядок у список?

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


2
привіт, я зробив це так, список (stringObject.split (','))
Günay Gültekin

Відповіді:


205

Подобається це:

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

Крім того, ви можете використовувати, eval()якщо довіряєте рядок безпечним:

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')

@Clinteney: Немає проблем ;-) Ви також можете заглянути, pickleякщо ви зберігаєте об'єкти до рядків.
Камерон

2
Це не масив, це список, масиви представляють основні значення і ведуть себе дуже схоже на списки, за винятком обмеженого типу об'єктів, що зберігаються в них.
Хоакін

8
Дружнє нагадування: Не використовуйте eval, навіть якщо ви довіряєте, що рядок є безпечним. Потенційну небезпеку для безпеки не варто нічого, окрім особистих скриптів та вмісту в інтерактивну оболонку.
А. Вілсон

3
eval ('[' + text + ']') буде вважати a, b, c змінними, а не рядками.
фабін

1
Недоцільність, оскільки два запропоновані рішення роблять абсолютно різні речі, і це жодним чином не пояснено у тексті відповіді. Хоча саме питання є не зовсім зрозумілим, у відповіді має бути зрозуміло, що два рішення не є еквівалентними альтернативами, а різними тлумаченнями питання.
Маттео Італія

179

Просто додайте до існуючих відповідей: сподіваємось, у майбутньому ви зустрінете щось подібне:

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

Але то , що ви маєте справу з прямо зараз , піти з @ Cameron відповідь «s.

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

4
Хоча я згоден з вами, що відповідь @ Кемерона була відповіді "прямо зараз", я думаю, що ваша ґрунтовність робить це більш правильним. У реальному світі нам рідко даються рядки, відокремлені комами, і це добре знати, як перетворити на список незалежно від формату.
TristanZimmerman

39

Наступний код Python перетворить ваш рядок у список рядків:

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)

3
Вони також можуть використовувати, jsonнаприклад:json.loads(teststr)
Мохаммед Назарі

24

Я не думаю , що вам потрібно , щоб

У 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

Рядки - це списки. Майже.


8

Якщо ви хочете розділити пробіли, ви можете просто скористатися .split():

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

Вихід:

['mary', 'had', 'a', 'little', 'lamb'] 

Це виводить те, що є між (), тобто взагалі нічого.
Антон

7

Якщо ви дійсно хочете масиви:

>>> 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'

1
З цікавості після того, як ви зробили myarray = array ('c', text), куди пішов "c"? оскільки якщо ви введете масив, ви отримали масив ("c", "abc"), але a [0] == a? Дякую
Клінтені Хуй

@Clinteney: 'c' означає "створити масив символів". Дивіться документацію для отримання додаткової інформації
Cameron

Я схвалив, але занадто рано. Я отримую масив ('c', '1 1 91 0,001 228') при виклику a = array ('c', e) де e = "1 1 91 0,001 228"
Валентин Хайніц,

@ValentinHeinitz Так, це те, що ви повинні отримати, як показано в моєму прикладі. Що ти очікуєш ?
Хоакін

1
@joaquin: Добре, я зрозумів. З відповіддю все гаразд. Мене збентежило запитання "текст == [a, b, c]" повинен бути "text == ['a', 'b', 'c']"
Валентин Хайнциц,

4
m = '[[1,2,3],[4,5,6],[7,8,9]]'

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

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Будь ласка, надайте додаткову інформацію разом із кодом, щоб оригінальний плакат міг краще зрозуміти, як це вирішує його проблему.
Іван

4

Усі відповіді хороші, є й інший спосіб, який полягає в розумінні списку, див. Рішення нижче.

u = "UUUDDD"

lst = [x for x in u]

для розділеного комою списку виконайте наступне

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

lst = [x for x in u.split(',')]

Я не розумію єдиного рядка для циклів і ніколи не буду
Містер PizzaGuy

1
@MrPizzaGuy це легко і дуже зручно, коли ви користуєтесь ним, перевірте це youtube.com/watch?v=AhSvKGTh28Q
waghydjemy

1

Я зазвичай використовую:

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

то stripвидалити пробіли навколо слів.


1

Щоб перетворити 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

0
# to strip `,` and `.` from a string ->

>>> 'a,b,c.'.translate(None, ',.')
'abc'

Слід використовувати вбудований translateметод для рядків.

Введіть help('abc'.translate)в оболонці Python для отримання додаткової інформації.



0

Приклад 1

>>> email= "myemailid@gmail.com"
>>> email.split()
#OUTPUT
["myemailid@gmail.com"]

Приклад 2

>>> email= "myemailid@gmail.com, someonsemailid@gmail.com"
>>> email.split(',')
#OUTPUT
["myemailid@gmail.com", "someonsemailid@gmail.com"]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.