No Python, strings já são matrizes de caracteres para todos os fins, exceto para substituição. Você pode cortá-los, de referência ou procurar itens de índice, etc.
Na minha opinião, muito melhor que o método ruby, você pode converter entre tipos de sequência livremente, ainda melhor, no nível C.
Arthurprs
O construtor de lista é um recurso elegante que converte automaticamente a string em uma matriz de caracteres. Como String é uma sequência homogênea de caracteres unicode, é muito legal trabalhar com Python, e o criador Guido tornou-o melhor. Python amoroso por suas maravilhosas capacidades.
Doogle
Eu quero que a bandeira aqui não faça isso ... mas de qualquer maneira, se você quiser cast_method = lambda x: [x]
Bem-vindo ao stackoverflow. Você se importaria de estender um pouco a resposta para explicar como ela resolve o problema?
NJInamdar
21
Isso é mero for, não há muito o que explicar. Eu acho que você deve ler o tutorial do python sobre estruturas de dados , especialmente compreensão de lista.
precisa saber é o seguinte
4
Isso apenas significa list(map(lambda c: c, iter("foobar"))), mas mais legível e significativo.
no1xsyzy
41
Se você deseja processar sua String, um caractere de cada vez. você tem várias opções.
Existem diferenças nas características de desempenho de cada um desses métodos?
qxzsilver 17/02
20
Eu explorei outras duas maneiras de realizar essa tarefa. Pode ser útil para alguém.
O primeiro é fácil:
In[25]: a =[]In[26]: s ='foobar'In[27]: a += sIn[28]: aOut[28]:['f','o','o','b','a','r']
E o segundo uso mape lambdafunção. Pode ser apropriado para tarefas mais complexas:
In[36]: s ='foobar12'In[37]: a = map(lambda c: c, s)In[38]: aOut[38]:['f','o','o','b','a','r','1','2']
Por exemplo
# isdigit, isspace or another facilities such as regexp may be usedIn[40]: a = map(lambda c: c if c.isalpha()else'', s)In[41]: aOut[41]:['f','o','o','b','a','r','','']
A primeira maneira é muito simples. Existem razões pelas quais as pessoas desejam algo mais complexo?
undrline
Olá! A primeira opção é realmente simples. O segundo, no entanto, tem melhor potencial para lidar com processamento mais complexo.
Alexey Milogradov 28/06/19
19
A tarefa se resume a iterar sobre os caracteres da sequência e coletando-os em uma lista. A solução mais ingênua seria
result =[]for character in string:
result.append(character)
Obviamente, pode ser reduzido para apenas
result =[character for character in string]
mas ainda existem soluções mais curtas que fazem a mesma coisa.
listO construtor pode ser usado para converter qualquer iterável (iteradores, listas, tuplas, string etc.) em lista.
>>> list('abc')['a','b','c']
A grande vantagem é que ele funciona da mesma maneira no Python 2 e no Python 3.
Além disso, a partir do Python 3.5 (graças ao incrível PEP 448 ) agora é possível criar uma lista a partir de qualquer iterável, descompactando-a em uma lista vazia literal:
>>>[*'abc']['a','b','c']
Isso é mais organizado e, em alguns casos, mais eficiente do que chamar o listconstrutor diretamente.
Eu acho que a última proposta é muito legal. Mas não vejo por que você revisitou algumas das outras abordagens, (a maioria delas) já foram publicadas aqui e desviam a atenção da incrível solução python 3.5!
MSDIFER #
13
Eu só preciso de uma matriz de caracteres:
arr = list(str)
Se você deseja dividir o str por um str específico:
# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
split()A função embutida separará apenas o valor com base em determinada condição, mas na única palavra, ela não pode atender à condição. Assim, pode ser resolvido com a ajuda de list(). Chama internamente a matriz e armazena o valor com base em uma matriz.
Suponha,
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']
Se você deseja ler apenas o acesso à string, pode usar a notação de matriz diretamente.
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'
Pode ser útil para testar sem usar o regexp. A cadeia contém uma nova linha final?
>>> t[-1]=='\n'False>>> t ='my string\n'>>> t[-1]=='\n'True
Bem, por mais que eu goste da versão da lista, aqui está outra maneira mais detalhada que eu encontrei (mas é legal, então eu pensei em adicioná-la à briga):
>>> 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']
Respostas:
Você precisa de lista
fonte
cast_method = lambda x: [x]
Você pega a string e a passa para list ()
fonte
Você também pode fazer isso de maneira muito simples, sem list ():
fonte
for
, não há muito o que explicar. Eu acho que você deve ler o tutorial do python sobre estruturas de dados , especialmente compreensão de lista.list(map(lambda c: c, iter("foobar")))
, mas mais legível e significativo.Se você deseja processar sua String, um caractere de cada vez. você tem várias opções.
Resultado:
Resultado:
Resultado:
Resultado:
fonte
Eu explorei outras duas maneiras de realizar essa tarefa. Pode ser útil para alguém.
O primeiro é fácil:
E o segundo uso
map
elambda
função. Pode ser apropriado para tarefas mais complexas:Por exemplo
Veja docs python para mais métodos
fonte
A tarefa se resume a iterar sobre os caracteres da sequência e coletando-os em uma lista. A solução mais ingênua seria
Obviamente, pode ser reduzido para apenas
mas ainda existem soluções mais curtas que fazem a mesma coisa.
list
O construtor pode ser usado para converter qualquer iterável (iteradores, listas, tuplas, string etc.) em lista.A grande vantagem é que ele funciona da mesma maneira no Python 2 e no Python 3.
Além disso, a partir do Python 3.5 (graças ao incrível PEP 448 ) agora é possível criar uma lista a partir de qualquer iterável, descompactando-a em uma lista vazia literal:
Isso é mais organizado e, em alguns casos, mais eficiente do que chamar o
list
construtor diretamente.Eu aconselho contra o uso de
map
abordagens baseados, porquemap
se não retornar uma lista em Python 3. Veja como filtrar uso, mapa, e reduzir em Python 3 .fonte
Eu só preciso de uma matriz de caracteres:
Se você deseja dividir o str por um str específico:
fonte
split()
A função embutida separará apenas o valor com base em determinada condição, mas na única palavra, ela não pode atender à condição. Assim, pode ser resolvido com a ajuda delist()
. Chama internamente a matriz e armazena o valor com base em uma matriz.Suponha,
fonte
Desembale-os:
fonte
Se você deseja ler apenas o acesso à string, pode usar a notação de matriz diretamente.
Pode ser útil para testar sem usar o regexp. A cadeia contém uma nova linha final?
fonte
Bem, por mais que eu goste da versão da lista, aqui está outra maneira mais detalhada que eu encontrei (mas é legal, então eu pensei em adicioná-la à briga):
fonte
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
semelhante a,
list(string)
mas retorna um gerador que é preguiçosamente avaliado no ponto de uso, tornando a memória eficiente.fonte
onde a é a sequência que você deseja separar. Os valores "a [i]" são o caractere individual da sequência que eles podem ser anexados a uma lista.
fonte
for c in a: print c
é muito mais direto