Как изменить строку в списке строк в Python - PullRequest
0 голосов

Я пытаюсь удалить ведущие запятые в предложении, и я не могу понять, почему это не работает

text = ",greetings   friends"

text_l = text.split()
for word in text_l:
    if word.startswith(','):
        word = word[1:]
text = ' '.join(text_l)

>>> ,greetings friends

но это так.

text = ",greetings   friends"

text_l = text.split()
for word in text_l:
    if word.startswith(','):
        indw = text_l.index(word)
        text_l[indw] = word[1:]
text = ' '.join(text_l)

>>> greetings friends

Ответы [ 3 ]

1 голос
/ 29 июня 2019

Ваш первый код не работает, потому что он только назначает новое значение локальной переменной word, без: изменения строки в списке. Ваш второй код работает (как вы заметили), но неэффективен, так как вы должны найти index каждого слова, которое вы хотите удалить. Вместо этого вы можете использовать enumerate для итерации слов и индексов одновременно, а также использовать lstrip вместо разбиения строки.

text_l = text.split()
for i, word in enumerate(text_l):
    if word.startswith(','):
        text_l[i] = word.lstrip(",")
text = ' '.join(text_l)

Кроме того, при использовании lstrip if больше не является необходимым, и мы можем сжать все это до выражения генератора одной строки в ' '.join(...):

text = ' '.join(word.lstrip(",") for word in text.split())
1 голос
/ 29 июня 2019

Переменные в Python не работают в качестве указателя, см. этот вопрос SO для лучшего объяснения. В первом фрагменте кода вы изменяете значение переменной word, а не объект, на который ссылается слово, поэтому ваш цикл ничего не меняет в исходном списке слов.

Второй код изменяет исходный список.

Как совет, более питонический способ сделать то, что вам нужно:

original_text = ",greetings   friends"

text = ' '.join(part.lstrip(',') for part in original_text.split())
text = ' '.join(map(lambda part: part.lstrip(','), original_text.split()))  # If you want a colleague to ask you "what's that???" :)
0 голосов
/ 29 июня 2019

Если вы хотите удалить начальную запятую, тогда lstrip - желаемая команда.

text = ",greetings   friends"

text_l = text.split()
text = []
for word in text_l:
    if word.startswith(','):
        word = word.lstrip(',')
    text.append(word)
text = ' '.join(text)

Вывод текста:

greetings friends
...