как разбить строку на массив символов?

<p>я пытался найти в интернете ответы на вопросы, как разбить строку на массив символов, но не могу найти простой метод</p><p><code>str.split(//)</code>, похоже, не работает как ruby. есть ли простой способ сделать это без зацикливания?</p>

<pre><code>>>> s = "foobar" >>> list(s) ['f', 'o', 'o', 'b', 'a', 'r'] </code></pre><p>вам нужно <a href="http://docs.python.org/library/functions.html#list">список</a> </p>

<p>вы берете строку и передаете ее в список ()</p><pre><code>s = "mystring" l = list(s) print l </code></pre>

<p>вы также можете сделать это очень простым способом без list ():</p><pre><code>>>> [c for c in "foobar"] ['f', 'o', 'o', 'b', 'a', 'r'] </code></pre>

<p>если вы хотите обрабатывать вашу строку по одному символу за раз. у вас есть разные варианты.</p><pre><code>uhello = u'hello\u0020world' </code></pre><blockquote> <p><strong>использование списка понимания:</strong></p> </blockquote><pre><code>print([x for x in uhello]) </code></pre><p>результат:</p><pre><code>['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] </code></pre><blockquote> <p><strong>используя карту:</strong></p> </blockquote><pre><code>print(list(map(lambda c2: c2, uhello))) </code></pre><p>результат:</p><pre><code>['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] </code></pre><blockquote> <p><strong>вызов встроенной функции списка:</strong></p> </blockquote><pre><code>print(list(uhello)) </code></pre><p>результат:</p><pre><code>['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] </code></pre><blockquote> <p><strong>используется для цикла:</strong></p> </blockquote><pre><code>for c in uhello: print(c) </code></pre><p>результат:</p><pre><code>h e l l o w o r l d </code></pre>

<p>я исследовал еще два способа решения этой задачи. это может быть полезно для кого-то.</p><p>первый прост:</p><pre><code>in [25]: a = [] in [26]: s = 'foobar' in [27]: a += s in [28]: a out[28]: ['f', 'o', 'o', 'b', 'a', 'r'] </code></pre><p>а второй использует <a href="https://docs.python.org/2/library/functions.html#map"><code>map</code></a> и <code>lambda</code> функцию. это может быть уместно для более сложных задач:</p><pre><code>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'] </code></pre><p>например</p><pre><code># 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', '', ''] </code></pre><p>смотрите <a href="https://docs.python.org/2/library/stdtypes.html#string-methods">python docs</a> чтобы узнать больше методов</p>

<p>задача сводится к тому, чтобы перебирать символы строки и собирать их в список. самое наивное решение будет выглядеть так</p><pre><code>result = [] for character in string: result.append(character) </code></pre><p>конечно, это может быть сокращено до</p><pre><code>result = [character for character in string] </code></pre><p>но есть более короткие решения, которые делают то же самое.</p><p> <a href="https://docs.python.org/3/library/functions.html#func-list"><code>list</code></a> конструктор можно использовать для преобразования любого <a href="https://docs.python.org/3/glossary.html#term-iterable"><em> итерируемого </em></a> (итератора, списка, кортежа, строки и т. д.) .) к списку.</p><pre><code>>>> list('abc') ['a', 'b', 'c'] </code></pre><p>большой плюс в том, что он работает одинаково в python 2 и python 3.</p><p>кроме того, начиная с python 3.5 (благодаря удивительному <a href="https://www.python.org/dev/peps/pep-0448/">pep 448</a> ), теперь можно создать список из любой итерируемой, распаковав его в литерал пустого списка:</p><pre><code>>>> [*'abc'] ['a', 'b', 'c'] </code></pre><p>это точнее, а в некоторых случаях более эффективно, чем прямой вызов конструктора <code>list</code>.</p><p>я бы не советовал использовать подходы на основе <code>map</code>, потому что <code>map</code> <em> не </em> возвращает список в python 3. см. <em> <a href="https://stackoverflow.com/q/13638898/2301450">как использовать фильтр, карту и уменьшение в python</a> </em>.</p>

<p>просто:</p><pre><code>s = 'my' print(list(s)) </code></pre>

<p>мне просто нужен массив символов:</p><pre><code>arr = list(str) </code></pre><p>если вы хотите разделить строку на определенную строку:</p><pre><code># str = "temp//temps" will will be ['temp', 'temps'] arr = str.split("//") </code></pre>

<p>встроенная функция <code>split()</code> будет отделять значение только на основе определенного условия, но в отдельном слове оно не сможет выполнить условие. таким образом, это может быть решено с помощью <code>list()</code>. он внутренне вызывает array и сохраняет значение на основе массива.</p><p>предположим,</p><pre><code>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'] </code></pre>

<p>если вы хотите получить доступ к строке только для чтения, вы можете использовать нотацию массива напрямую.</p><pre><code>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' </code></pre><p>может быть полезно для тестирования без использования регулярных выражений. содержит ли строка завершающий символ новой строки?</p><pre><code>>>> t[-1] == '\n' false >>> t = 'my string\n' >>> t[-1] == '\n' true </code></pre>

<p>ну, как бы мне ни понравилась версия со списком, вот еще один более многословный способ, который я нашел (но это круто, поэтому я подумал, что добавлю его в бой):</p><pre><code>>>> 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'] </code></pre>

<pre><code>from itertools import chain string = 'your string' chain(string) </code></pre><p>похож на <code>list(string)</code>, но возвращает генератор, который лениво оценивается в точке использования, поэтому эффективно использует память.</p>

<pre><code>>>> for i in range(len(a)): ... print a[i] ... </code></pre><p>где - это строка, которую вы хотите выделить. значения "a [i]" являются отдельным символом строки, которую они могут быть добавлены в список.</p>