Я пытался найти в Интернете ответы на вопросы, как разбить строку на массив символов, но не могу найти простой метод
str.split(//)
похоже, не работает как Ruby. Есть ли простой способ сделать это без зацикливания?
Я пытался найти в Интернете ответы на вопросы, как разбить строку на массив символов, но не могу найти простой метод
str.split(//)
похоже, не работает как Ruby. Есть ли простой способ сделать это без зацикливания?
Ответы:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
Вам нужен список
cast_method = lambda x: [x]
Вы берете строку и передаете ее в список ()
s = "mystring"
l = list(s)
print l
Вы также можете сделать это очень простым способом без list ():
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
for
, не так много, чтобы объяснить. Я думаю, что вы должны прочитать руководство по Python по структурам данных , особенно по списку.
list(map(lambda c: c, iter("foobar")))
, но более читабельно и осмысленно.
Если вы хотите обрабатывать вашу строку по одному символу за раз. у вас есть разные варианты.
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
Я исследовал еще два способа решения этой задачи. Это может быть полезно для кого-то.
Первый прост:
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 для большего количества методов
Задача сводится к тому, чтобы перебирать символы строки и собирать их в список. Самое наивное решение будет выглядеть так
result = []
for character in string:
result.append(character)
Конечно, его можно сократить до
result = [character for character in string]
но есть более короткие решения, которые делают то же самое.
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 .
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']
Распакуйте их:
word = "Paralelepipedo"
print([*word])
Если вы хотите получить доступ к строке только для чтения, вы можете использовать нотацию массива напрямую.
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
Ну, как бы мне ни понравилась версия со списком, вот еще один более многословный способ, который я нашел (но это круто, поэтому я подумал, что добавлю его в бой):
>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
from itertools import chain
string = 'your string'
chain(string)
аналогично, list(string)
но возвращает генератор, который лениво вычисляется в точке использования, поэтому память эффективна.
>>> for i in range(len(a)):
... print a[i]
...
где - это строка, которую вы хотите выделить. Значения «a [i]» являются отдельным символом строки, которую они могут быть добавлены в список.
for c in a: print c
гораздо более прямой