Найти - Пользователи
Полная версия: Как элегантно заменить слова из списка в строке?
Начало » Python для новичков » Как элегантно заменить слова из списка в строке?
1 2
Dobrodel
Друзья, здравствуйте
Подскажите пожалуйста как элегантно заменить слова из списка в строке?
Есть варианты вхождений
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'

Нужно перебором из переменной dd заменить все вхождения в строке string. Желателен вариант в одну-две строку
Alen
Что на что менять? dd - это “что меняем” или это “на что меняем”?
theproshin
list = string.split()
[list.__setitem__(list.index(i), j) for i in list for j in dd if j in i]; " ".join(list)
ajib6ept
theproshin а что должно получиться? у меня вышло

# -*- coding: utf-8 -*-
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
list = string.split()
print  [list.__setitem__(list.index(i), j) for i in list for j in dd if j in i]; " ".join(list)

[None, None, None]
ajib6ept
Dobrodel
Друзья, здравствуйтеПодскажите пожалуйста как элегантно заменить слова из списка в строке?Есть варианты вхождений

Можно через регулярные выражения

# -*- coding: utf-8 -*-
import re
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
print re.sub('|'.join(dd), '', string)
theproshin
ajib6ept, генератор нужен лишь изменить объект, его вывод нам неважен.
# -*- coding: utf-8 -*-
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
list = string.split()
[list.__setitem__(list.index(i), j) for i in list for j in dd if j in i]
print  " ".join(list)
ajib6ept
theproshin
ajib6ept, генератор нужен лишь изменить объект, его вывод нам неважен

все увидел, невнимательно посмотрел
Dobrodel
Друзья, простите, совсем забыл про саму замену. Необходимо все вхождения из dd удалить из строки string, т.е. заменить на пустоту.
Т.е. результат должен быть = ‘word word word fdsghg’
Регулярные выражения вычисляются очень долго, поэтому их желательно не использовать. Наилучший вариант будет это через map или/и lambda или что то в этом роде.

PS
Было бы здорово сделать примерно так
dd = ['word1', 'word2', 'word3']
string = 'word1word word word2 word3word fdsghg'
list = string.split()
[i.replace( j, '' )  for i in list for j in dd if j in i]
terabayt
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
for i in dd: string = string.replace(i, '')
print string
Dobrodel
Благодарю, то что надо))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB