Python: Удаление пробелов от объектов списка [дубликат]

47
задан Harpal 12 July 2010 в 23:04
поделиться

6 ответов

Строки в Python неизменяемы (то есть их данные не могут быть изменены), поэтому метод replace не изменяет строку - он возвращает новую строку. Вы могли бы исправить свой код следующим образом:

for i in hello:
    j = i.replace(' ','')
    k.append(j)

Однако лучшим способом достижения цели является использование понимания списка. Например, следующий код удаляет ведущие и последующие пробелы из каждой строки в списке, используя strip:

hello = [x.strip(' ') for x in hello]
102
ответ дан 26 November 2019 в 19:20
поделиться
result = map(str.strip, hello)
7
ответ дан 26 November 2019 в 19:20
поделиться

Строковые методы возвращают измененную строку.

k = [x.replace(' ', '') for x in hello]
4
ответ дан 26 November 2019 в 19:20
поделиться

Вычисление списка [num.strip() for num in hello] - самое быстрое.

>>> import timeit
>>> hello = ['999 ',' 666 ']

>>> t1 = lambda: map(str.strip, hello)
>>> timeit.timeit(t1)
1.825870468015296

>>> t2 = lambda: list(map(str.strip, hello))
>>> timeit.timeit(t2)
2.2825958750515269

>>> t3 = lambda: [num.strip() for num in hello]
>>> timeit.timeit(t3)
1.4320335103944899

>>> t4 = lambda: [num.replace(' ', '') for num in hello]
>>> timeit.timeit(t4)
1.7670568718943969
11
ответ дан 26 November 2019 в 19:20
поделиться

Предполагая, что вы не хотите удалять внутренние пробелы:

def normalize_space(s):
    """Return s stripped of leading/trailing whitespace
    and with internal runs of whitespace replaced by a single SPACE"""
    # This should be a str method :-(
    return ' '.join(s.split())

replacement = [normalize_space(i) for i in hello]
3
ответ дан 26 November 2019 в 19:20
поделиться

replace () не работает на месте, вам нужно присвоить результат чему-то. Кроме того, для более краткого синтаксиса вы можете заменить цикл for однострочным: hello_no_spaces = map (lambda x: x.replace ('', ''), hello)

1
ответ дан 26 November 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: