На мой взгляд, намного лучше, чем метод ruby, вы можете свободно конвертировать типы последовательностей на уровне C.
arthurprs
Конструктор списка - это элегантная функция, которая автоматически преобразует строку в массив символов. Поскольку String - это однородная последовательность символов Юникода, так здорово работать с Python, и создатель Guido сделал его лучше. Люблю питона за его замечательные возможности.
17
Я хочу, чтобы флаг здесь не делал этого ... но в любом случае, если вы хотите, чтобы его вызывали, вы можете избежать этого, используяcast_method = lambda x: [x]
Есть ли различия в характеристиках производительности каждого из этих методов?
qxzsilver
20
Я исследовал еще два способа решения этой задачи. Это может быть полезно для кого-то.
Первый прост:
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 usedIn[40]: a = map(lambda c: c if c.isalpha()else'', s)In[41]: a
Out[41]:['f','o','o','b','a','r','','']
Смотрите Python Docs для большего количества методов
Первый способ очень прост. Есть ли причины, по которым люди хотят чего-то более сложного?
отменить
Здравствуйте! Первый вариант действительно прост. Второй, однако, имеет больший потенциал для обработки более сложной обработки.
Алексей Милоградов
19
Задача сводится к тому, чтобы перебирать символы строки и собирать их в список. Самое наивное решение будет выглядеть так
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прямой вызов конструктора.
Я думаю, что последнее предложение очень приятно. Но я не понимаю, почему вы пересмотрели некоторые другие подходы (большинство из них) уже были размещены здесь и отвлекают от удивительного решения Python 3.5!
MSeifert
14
Мне просто нужен массив символов:
arr = list(str)
Если вы хотите разделить строку на определенную строку:
# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
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']
Если вы хотите получить доступ к строке только для чтения, вы можете использовать нотацию массива напрямую.
Python2.7.6(default,Mar222014,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']
Ответы:
Вам нужен список
источник
cast_method = lambda x: [x]
Вы берете строку и передаете ее в список ()
источник
Вы также можете сделать это очень простым способом без list ():
источник
for
, не так много, чтобы объяснить. Я думаю, что вы должны прочитать руководство по Python по структурам данных , особенно по списку.list(map(lambda c: c, iter("foobar")))
, но более читабельно и осмысленно.Если вы хотите обрабатывать вашу строку по одному символу за раз. у вас есть разные варианты.
Вывод:
Вывод:
Вывод:
Вывод:
источник
Я исследовал еще два способа решения этой задачи. Это может быть полезно для кого-то.
Первый прост:
И второй использовать
map
иlambda
функционировать. Может подойти для более сложных задач:Например
Смотрите Python Docs для большего количества методов
источник
Задача сводится к тому, чтобы перебирать символы строки и собирать их в список. Самое наивное решение будет выглядеть так
Конечно, его можно сократить до
но есть более короткие решения, которые делают то же самое.
list
Конструктор может использоваться для преобразования любых итераций (итераторов, списков, кортежей, строк и т. д.) в список.Большой плюс в том, что он работает одинаково как в Python 2, так и в Python 3.
Кроме того, начиная с Python 3.5 (благодаря великолепному PEP 448 ) теперь можно создать список из любого итерируемого, распаковав его в пустой литерал списка:
Это аккуратнее, а в некоторых случаях более эффективно, чем
list
прямой вызов конструктора.Я бы посоветовал не использовать
map
подходы на основе, потомуmap
что не возвращает список в Python 3. См. Как использовать фильтр, карту и сокращение в Python 3 .источник
Мне просто нужен массив символов:
Если вы хотите разделить строку на определенную строку:
источник
split()
Встроенная функция будет отделять значение только на основе определенного условия, но одним словом она не может выполнить условие. Таким образом, это может быть решено с помощьюlist()
. Он внутренне вызывает Array и сохраняет значение на основе массива.Предположим,
источник
Распакуйте их:
источник
Если вы хотите получить доступ к строке только для чтения, вы можете использовать нотацию массива напрямую.
Может быть полезно для тестирования без использования регулярных выражений. Содержит ли строка завершающий символ новой строки?
источник
Ну, как бы мне ни понравилась версия со списком, вот еще один более многословный способ, который я нашел (но это круто, поэтому я подумал, что добавлю его в бой):
источник
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
аналогично,
list(string)
но возвращает генератор, который лениво вычисляется в точке использования, поэтому память эффективна.источник
где - это строка, которую вы хотите выделить. Значения «a [i]» являются отдельным символом строки, которую они могут быть добавлены в список.
источник
for c in a: print c
гораздо более прямой