Вы обрабатываете эти два символа отдельно, используя цикл for
:
- Первый раз в цикле
for ch in ['-', '.']:
, ch
установлен на '-'
. Когда этот символ найден в i
, вы создаете новую строку с удаленным -
и добавляете ее к SPACE
, а сам i
добавляется к WITH_SYMBOL
. Если персонаж не найден, вы добавляете к NO_SYMBOL
.
- Во второй раз в цикле
ch
устанавливается на '.'
, и вы снова выполняете ту же работу.
В результате вы всегда добавляете либо SPACE
и WITH_SYMBOL
, либо NO_SYMBOL
дважды для каждого i
.
Вам нужно отложить добавление до тех пор, пока вы не обработаете все символы в ch
, и только после завершения цикла определите, куда добавить. Для этого вы можете использовать флаговую переменную:
for i in data:
altered = False
cleaned = i
for ch in ['-', '.']:
if ch in clean:
altered = True
cleaned = cleaned.replace(ch, ' ')
if altered:
SPACE.append(cleaned)
WITH_SYMBOL.append(i)
else:
NO_SYMBOL.append(i)
Вы также можете просто проверить наличие или символа и использовать str.replace()
для обоих. Это безопасно, str.replace()
не волнует, если заменяемый символ отсутствует вообще:
if '-' in i or '.' in i:
SPACE.append(i.replace('-', ' ').replace('.', ' '))
WITH_SYMBOL.append(i)
else:
NO_SYMBOL.append(i)
Вместо двух .replace()
вызовов вы также можете использовать таблицу перевода , переданную в str.translate()
; это быстрее и намного более гибко, если у вас есть переменное количество символов для замены. В последнем случае вы можете использовать функцию any()
для проверки последовательности символов:
symbols = ['-', '.'] # can be extended later
translation_map = str.maketrans(dict.fromkeys(symbols, ' ')) # map any symbol to a space
for entry in data: # entry is a nicer name here than i
# the following loops over symbols until one is found that matches, then
# returns True. If no matching symbol is found, False is given instead.
if any(ch in entry for ch in symbols):
SPACE.append(entry.translate(translation_map))
WITH_SYMBOL.append(entry)
else:
NO_SYMBOL.append(entry)