2017-02-03 5 views
1

список оригинальных строк:Python, Как заменить несколько частей (в списке) элементов в списке

Originals = ["nice apple", "orange", "pear sweet", "red ape"] 

список строк для удаления:

To_remove = ["nice ", " sweet"] 

То, что я хочу добиться того, чтобы удалить строки, необходимых для удаления в каждых элементах в исходных словах

result: ["apple", "orange", "pear", "red ape"] 

Я следующие, но это не приводит к хорошему результат.

for t in To_remove: 
    for o in Originals: 
     print o.replace(t, "") 

Каким будет правильный путь? Спасибо.

+1

* 'но это не дает хороший результат' * - ** Что вы видите **? Пожалуйста, покажи нам! – Wolf

+0

Название вашего вопроса довольно сбивает с толку, возможно, вы должны переписать его в соответствии с вашими настоятельными потребностями. – Wolf

+0

Предложение для улавливающего заголовка: ** Howto «цензор» список строк в python? ** :-) – Wolf

ответ

3

Строки неизменяемы. Следовательно, ни один из методов, которые вы можете вызвать в строке, не имеет модификации на месте. Все они возвращают новую строку, так что вы должны передать строку, возвращаемую replace:

for t in To_remove: 
    for i in range(len(Originals)): 
     Originals[i] = Originals[i].replace(t, "") 

Вы можете проверить это question для того, как объединить замену нескольких моделей.

+0

И для просто подсказки и в случае использования стандартов PEP8: используйте случай змей. – wencakisa

+0

@Wencakisa смотреть OP (относительно * 'змея кейс' *) – Wolf

+0

@schwobaseggl, спасибо! –

3

Поскольку строка является неизменной, вам необходимо переназначить элемент списка.

for t in To_remove: 
    for i, o in enumerate(Originals): 
     Originals[i] = o.replace(t, "") 

print Originals 

надеюсь, что это поможет.

+0

Благодарю вас за учение. отлично! надеюсь, что вы не возражаете, я выбираю первый ответ для ответа ... –

+0

Мне нравится идея '' print Originals', эта часть отсутствует в OP – Wolf

1

Вы печатаете результаты замены, но не меняете содержимое списка. Если у вас есть более близкий взгляд на replace method (для строки s (!)), Вы увидите, что вы не только не меняете список, но также не меняете строки, которые вы получаете for o in Originals. Я опускаю, включая рабочий пример, поскольку schwobaseggl и thangtn[1] уже предоставляют его.


[1] Кто был на самом деле первый? Временные метки SO противоречат моему личному опыту.

+0

благодарю вас за знание .. –

+0

BTW: [официальные документы] (https: //docs.python .org/3/библиотека/stdtypes.html # ул.замените) очень скудны, возможно, именно по этой причине у вас так плохие результаты Google. – Wolf

1
Originals = ["nice apple", "orange", "pear sweet", "red ape"] 
To_remove = ["nice ", " sweet"] 
result = [] 

for o in Originals: 
    for t in To_remove: 
     result.append(o.replace(t, "")) 

print result 

Это то, что вам нужно?

+0

Благодарю вас за помощь. –

+0

Еще один текст может помочь понять цель повторения уже известного. – Wolf

+0

... Я должен исправить себя об этом (относительно * 'повторения *), вы не замените место на месте. Действительный вариант. – Wolf

Смежные вопросы