Как разбить строку на массив символов? - PullRequest
394 голосов
/ 12 февраля 2011

Я пытался поискать ответы в Интернете на разбиение строки на массив символов, но не могу найти простой метод

str.split(//) не похоже на работу Ruby. Есть ли простой способ сделать это без зацикливания?

Ответы [ 13 ]

782 голосов
/ 12 февраля 2011
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

Вам нужно список

65 голосов
/ 12 февраля 2011

Вы берете строку и передаете ее в список ()

s = "mystring"
l = list(s)
print l
57 голосов
/ 24 марта 2015

Вы также можете сделать это очень простым способом без списка ():

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
32 голосов
/ 03 июня 2017

Если вы хотите обрабатывать вашу строку по одному символу за раз. у вас есть разные варианты.

uhello = u'Hello\u0020World'

Использование списка понимания:

print([x for x in uhello])

Выход:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Использование карты:

print(list(map(lambda c2: c2, uhello)))

Выход:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Вызов Встроенная функция списка:

print(list(uhello))

Выход:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Использование для цикла:

for c in uhello:
    print(c)

Выход:

H
e
l
l
o

W
o
r
l
d
20 голосов
/ 10 сентября 2014

Я исследовал еще два способа выполнения этой задачи. Это может быть полезно для кого-то.

Первый прост:

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

А второй использует функции map и lambda. Может подойти для более сложных задач:

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

Например

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

См. Python Docs для дополнительных методов

17 голосов
/ 05 апреля 2016

Задача сводится к тому, чтобы перебирать символы строки и собирать их в список.Самое наивное решение выглядело бы как

result = []
for character in string:
    result.append(character)

Конечно, его можно сократить до

result = [character for character in string]

, но все же есть более короткие решения, которые делают то же самое.

*Конструктор 1008 *list может использоваться для преобразования любого повторяемого (итераторов, списков, кортежей, строк и т. Д.) В список.
>>> list('abc')
['a', 'b', 'c']

Большим плюсом является то, что он работает одинаково и в Python 2, и в Python 3.

Кроме того, начиная с Python 3.5 (благодаря потрясающей PEP 448 ) теперь можно построить список из любой итерируемой, распаковав его в пустой литерал списка:

>>> [*'abc']
['a', 'b', 'c']

Это проще, а в некоторых случаях более эффективно, чем прямой вызов конструктора list.

Я бы посоветовал не использовать подходы на основе map, потому что map не не возвращает список в Python 3. См. Как использовать фильтр, карту,и уменьшить в Python 3 .

14 голосов
/ 15 марта 2017

простой:

s = 'My'    
print(list(s))
10 голосов
/ 14 декабря 2018

Мне просто нужен массив символов:

arr = list(str)

Если вы хотите разделить строку по определенной строке:

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
8 голосов
/ 18 августа 2018

split() встроенная функция будет отделять значение только на основе определенного условия, но одним словом не может выполнить условие. Таким образом, это можно решить с помощью list(). Он внутренне вызывает Array и сохраняет значение на основе массива.

Предположим,

a = "bottle"
a.split() // will only return the word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']
3 голосов
/ 17 мая 2014

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

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'

Может быть полезно для тестирования без использования регулярных выражений.Содержит ли строка завершающий символ новой строки?

>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...