Как удалить пробелы в списке, который имеет определенный символ
Как вы получаете список, чтобы исправить пробелы в списке m.
m = ['m, a \n', 'l, n \n', 'c, l\n']
for i in m:
if (' ') in i:
i.strip(' ')
Я получил:
'm, a \n'
'l, n \n'
'c, l\n'
и я хочу это вернуть:
['m, a\n', 'l, n\n', 'c, l\n']
4 ответа
Метод strip() удалит все символы с конца строки. В вашем случае полоса начинается в конце вашей строки, встречается с символом '\n' и завершается.
Кажется, немного неясно, что вы пытаетесь сделать, но я предполагаю, что вы пытаетесь убрать любой пробел между последним непробельным символом вашей строки и символом новой строки. Поправьте меня если я ошибаюсь.
Есть много способов сделать это, и это может быть не самым лучшим, но вот что я придумал:
m = ['This, is a string. \n', 'another string! \n', 'final example\n ']
m = map(lambda(x): x.rstrip() + '\n' if x[-1] == '\n' else x.rstrip(' '), m)
print(m)
['This, is a string.\n', 'another string!\n', 'final example\n']
Здесь я использую встроенный map
Функция выполняет итерацию по каждому элементу списка и удаляет все пробелы в конце (rstrip() вместо strip(), который выполняет как начало, так и конец) строки, и добавляет новую строку, если в исходной строке был один,
Ваш код не будет полезен в скрипте; вы просто видите REPL, отображающий результат выражения i.strip(' ')
, В сценарии это значение будет просто проигнорировано.
Чтобы создать список, используйте понимание списка:
result = [i.strip(' ') for i in m if ' ' in i]
Обратите внимание, однако, strip
удаляет только запрошенный символ с любого конца; в ваших данных пробел предшествует новой строке. Вам нужно будет сделать что-то вроде удаления новой строки, а затем положить его обратно:
result = ["%s\n" % i.strip() for i in m if ' ' in i]
Вы можете использовать регулярные выражения:
import re
m = ['m, a \n', 'l, n \n', 'c, l\n']
final_m = [re.sub('(?<=[a-zA-Z])\s+(?=\n)', '', i) for i in m]
Выход:
['m, a\n', 'l, n\n', 'c, l\n']
Быстро и грязно:
m = [x.replace (' \n', ' \n') для x в m]
Если вы знаете, что перед ' \n' идет только один пробел