Eu tenho algum código python que se divide em vírgula, mas não tira o espaço em branco:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
Prefiro acabar com o espaço em branco removido assim:
['blah', 'lots', 'of', 'spaces', 'here']
Estou ciente de que poderia percorrer a lista e extrair () cada item, mas, como esse é Python, acho que há uma maneira mais rápida, fácil e elegante de fazê-lo.
python
whitespace
strip
Mr_Chimp
fonte
fonte
Divida usando uma expressão regular. Note que tornei o caso mais geral com espaços à esquerda. A compreensão da lista é remover as cadeias nulas na frente e atrás.
Isso funciona mesmo
^\s+
que não corresponda:Veja por que você precisa de ^ \ s +:
Veja os espaços principais em blá?
Esclarecimento: acima usa o interpretador Python 3, mas os resultados são os mesmos no Python 2.
fonte
[x.strip() for x in my_string.split(',')]
é mais pitônico para a pergunta. Talvez haja casos em que minha solução é necessária. Atualizarei esse conteúdo se eu encontrar um.^\s+
necessário? Testei seu código sem ele e ele não funciona, mas não sei por quê.re.compile("^\s*,\s*$")
, o resultado é[' blah, lots , of , spaces, here ']
.^\s+
faz. Como você pode ver por si mesmo,^\s*,\s*$
também não retorna os resultados desejados. Portanto, se você deseja dividir com uma regexp, use^\s+|\s*,\s*|\s+$
.Eu vim para adicionar:
map(str.strip, string.split(','))
mas vi que já havia sido mencionado por Jason Orendorff em um comentário .
Lendo o comentário de Glenn Maynard na mesma resposta, sugerindo a compreensão da lista no mapa, comecei a me perguntar por quê. Eu assumi que ele quis dizer por razões de desempenho, mas é claro que ele poderia ter falado por razões estilísticas ou algo mais (Glenn?).
Então, um teste rápido (possivelmente defeituoso?) Na minha caixa, aplicando os três métodos em um loop, revelou:
tornando
map(str.strip, string.split(','))
o vencedor, embora pareça que eles estão todos no mesmo estádio.Certamente, embora o mapa (com ou sem um lambda) não deva ser necessariamente descartado por razões de desempenho, e para mim é pelo menos tão claro quanto a compreensão de uma lista.
Editar:
Python 2.6.5 no Ubuntu 10.04
fonte
Apenas remova o espaço em branco da string antes de dividi-la.
fonte
"you just, broke this"
.Sei que isso já foi respondido, mas se você terminar muito isso, expressões regulares podem ser o melhor caminho a seguir:
Ele
\s
corresponde a qualquer caractere de espaço em branco e apenas o substituímos por uma string vazia''
. Você pode encontrar mais informações aqui: http://docs.python.org/library/re.html#re.subfonte
Este trabalho é bom para mim.
fonte
re
(como em expressões regulares) permite dividir vários caracteres ao mesmo tempo:Isso não funciona bem para sua sequência de exemplo, mas funciona bem para uma lista separada por vírgula-espaço. Para o seu exemplo de seqüência, você pode combinar o poder re.split para dividir nos padrões regex para obter um efeito "dividir isso ou aquilo".
Infelizmente, isso é feio, mas a
filter
fará o truque:Voila!
fonte
re.split(' *, *', string)
?re.split('[, ]*',string)
para o mesmo efeito.[, ]*
deixa uma string vazia no final da lista. Eu acho que o filtro ainda é uma boa coisa para colocar lá, ou manter a compreensão da lista como a resposta principal faz.map(lambda s: s.strip(), mylist)
seria um pouco melhor do que fazer um loop explicitamente. Ou para a coisa toda de uma vez:map(lambda s:s.strip(), string.split(','))
fonte
map
você estiver usando , principalmente se estiver usandolambda
, verifique novamente se você deve usar uma compreensão de lista.map(str.strip, s.split(','))
.fonte
Simplesmente, vírgula ou pelo menos um espaço em branco com / sem espaços em branco anteriores / sucessivos.
Tente por favor!
fonte
map(lambda s: s.strip(), mylist)
seria um pouco melhor do que fazer um loop explicitamente.Ou para a coisa toda de uma vez:
Isso é basicamente tudo o que você precisa.
fonte