У меня есть некоторый код Python, который разделяется на запятую, но не удаляет пробелы:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
Я предпочел бы в конечном итоге удалить пробелы, как это:
['blah', 'lots', 'of', 'spaces', 'here']
Я знаю, что мог бы пройтись по списку и обрезать () каждый элемент, но, поскольку это Python, я предполагаю, что есть более быстрый, простой и элегантный способ сделать это.
python
whitespace
strip
Mr_Chimp
источник
источник
Разбить с помощью регулярного выражения. Обратите внимание, я сделал случай более общим с ведущими пробелами. Понимание списка заключается в удалении пустых строк спереди и сзади.
Это работает, даже если
^\s+
не совпадает:Вот почему вам нужно ^ \ s +:
Видишь лидирующие места в бла?
Пояснение: выше используется интерпретатор Python 3, но результаты те же в Python 2.
источник
[x.strip() for x in my_string.split(',')]
это более питонно для задаваемого вопроса. Может быть, есть случаи, когда мое решение необходимо. Я обновлю этот контент, если столкнусь с одним из них.^\s+
нужно? Я проверил ваш код без него, и он не работает, но я не знаю почему.re.compile("^\s*,\s*$")
, результат есть[' blah, lots , of , spaces, here ']
.^\s+
делает. Как видите,^\s*,\s*$
не дает желаемых результатов. Так что если вы хотите разделить с помощью регулярного выражения, используйте^\s+|\s*,\s*|\s+$
.Я пришел, чтобы добавить:
map(str.strip, string.split(','))
но видел, что это уже упоминалось Джейсоном Орендорффом в комментарии .
Читая комментарий Гленна Мейнарда в том же ответе, предлагая списки по карте, я начал задумываться, почему. Я предположил, что он имел в виду по причинам производительности, но, конечно, он мог иметь в виду по стилистическим соображениям, или что-то еще (Гленн?).
Итак, быстрый (возможно некорректный?) Тест на моем боксе с применением трех методов в цикле показал:
изготовление
map(str.strip, string.split(','))
победителя, хотя кажется, что они все на одной площадке.Конечно, хотя карта (с лямбдой или без нее) не обязательно должна быть исключена из соображений производительности, и для меня это, по крайней мере, так же ясно, как понимание списка.
Редактировать:
Python 2.6.5 в Ubuntu 10.04
источник
Просто удалите пробел из строки, прежде чем разбить его.
источник
"you just, broke this"
.Я знаю, что на этот вопрос уже был дан ответ, но если вы прекратите делать это часто, то лучше использовать регулярные выражения:
Соответствует
\s
любому символу пробела, и мы просто заменяем его пустой строкой''
. Вы можете найти больше информации здесь: http://docs.python.org/library/re.html#re.subисточник
это прекрасно работает для меня.
источник
re
(как в регулярных выражениях) позволяет разделить на несколько символов одновременно:Это не очень хорошо работает для вашего примера строки, но хорошо работает для списка, разделенного запятыми. В качестве примера строки вы можете объединить силу re.split для разделения на шаблоны регулярных выражений, чтобы получить эффект «split-on-this-or-that».
К сожалению, это некрасиво, но
filter
сработает:Вуаля!
источник
re.split(' *, *', string)
?re.split('[, ]*',string)
для того же эффекта.[, ]*
оставляет пустую строку в конце списка. Я думаю, что фильтр по-прежнему хорошая вещь, чтобы добавить туда или придерживаться списка понимания, как это делает верхний ответ.map(lambda s: s.strip(), mylist)
было бы немного лучше, чем явно зацикливание. Или для всего этого сразу:map(lambda s:s.strip(), string.split(','))
источник
map
, особенно если вы используетеlambda
его, дважды проверьте, следует ли вам использовать понимание списка.map(str.strip, s.split(','))
.источник
Просто запятая или хотя бы один пробел с / без предшествующего / последующего пробела.
Пожалуйста попробуйте!
источник
map(lambda s: s.strip(), mylist)
было бы немного лучше, чем явно зацикливание.Или для всего этого сразу:
Это в основном все, что вам нужно.
источник