Строки в Python неизменяемы (то есть их данные не могут быть изменены), поэтому метод replace не изменяет строку - он возвращает новую строку. Вы могли бы исправить свой код следующим образом:
for i in hello:
j = i.replace(' ','')
k.append(j)
Однако лучшим способом достижения цели является использование понимания списка. Например, следующий код удаляет ведущие и последующие пробелы из каждой строки в списке, используя strip
:
hello = [x.strip(' ') for x in hello]
Строковые методы возвращают измененную строку.
k = [x.replace(' ', '') for x in hello]
Вычисление списка [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
Предполагая, что вы не хотите удалять внутренние пробелы:
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]
replace () не работает на месте, вам нужно присвоить результат чему-то. Кроме того, для более краткого синтаксиса вы можете заменить цикл for однострочным: hello_no_spaces = map (lambda x: x.replace ('', ''), hello)