Tentei procurar na web respostas para dividir uma string em uma matriz de caracteres, mas não consigo encontrar um método simples
str.split(//)
parece não funcionar como Ruby. Existe uma maneira simples de fazer isso sem fazer loop?
Tentei procurar na web respostas para dividir uma string em uma matriz de caracteres, mas não consigo encontrar um método simples
str.split(//)
parece não funcionar como Ruby. Existe uma maneira simples de fazer isso sem fazer loop?
Respostas:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
Você precisa de lista
cast_method = lambda x: [x]
Você pega a string e a passa para list ()
s = "mystring"
l = list(s)
print l
Você também pode fazer isso de maneira muito simples, sem list ():
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
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.
uhello = u'Hello\u0020World'
Usando a compreensão da lista:
print([x for x in uhello])
Resultado:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Usando o mapa:
print(list(map(lambda c2: c2, uhello)))
Resultado:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Chamando a função de lista incorporada:
print(list(uhello))
Resultado:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Usando o loop for:
for c in uhello:
print(c)
Resultado:
H
e
l
l
o
W
o
r
l
d
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 += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']
E o segundo uso map
e lambda
função. Pode ser apropriado para tarefas mais complexas:
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']
Por exemplo
# 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', '', '']
Veja docs python para mais métodos
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.
list
O 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 list
construtor diretamente.
Eu aconselho contra o uso de map
abordagens baseados, porque map
se não retornar uma lista em Python 3. Veja como filtrar uso, mapa, e reduzir em Python 3 .
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']
Desembale-os:
word = "Paralelepipedo"
print([*word])
Se você deseja ler apenas o acesso à string, pode usar a notação de matriz diretamente.
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'
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']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
>>> for i in range(len(a)):
... print a[i]
...
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.
for c in a: print c
é muito mais direto