У меня есть многострочная строка, которая должна содержать длину 3. Однако белые пробелы застревают в одной или нескольких строках, и я хочу их удалить:
s = '''123
4 56
7 8'''
print(s)
lines = s.splitlines()
for idx, line in enumerate(lines):
for _ in range(len(line) - len('123')):
lines[idx] = line.replace(' ', '')
s = '\n'.join(lines)
print(s)
123
4 56 # problematic line
7 8
123
456 # fixed line
7 8 # this line should not change, as the white-space here does not make the line longer than length 3
Это дает мне желаемый результат (т.е. Все строки имеют длину 3 (я не хочу удалять любые пробелы, которые не нарушают правило длины 3), и удаляются только белые пробелы), но есть ли лучший способ сделать это?
Вы можете передать count
как аргумент str.replace
чтобы указать максимальную сумму замены.
Для сокращения кода также можно использовать понимание списка.
s = '''123
4 56
7 8'''
lines = [line.replace(' ', '', len(line) - 3) for line in s.splitlines()]
s = '\n'.join(lines)
print(s)
Обратите внимание, что отрицательный count
просто интерпретируется как 0
, поэтому хорошо использовать len(line) - 3
хотя он может вернуть отрицательное значение.
123
456
7 8
Это один из подходов.
Демо - версия:
s = '''123
4 56
7 8
123
456
7 8'''
print("\n".join(i.replace(' ', '') if len(i) != 3 else i for i in s.splitlines()))
Выход:
123
456
7 8
123
456
7 8