Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2015 20:32:56

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

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

dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'

Нужно перебором из переменной dd заменить все вхождения в строке string. Желателен вариант в одну-две строку

Офлайн

#2 Янв. 6, 2015 21:33:28

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

Что на что менять? dd - это “что меняем” или это “на что меняем”?

Офлайн

#3 Янв. 6, 2015 22:10:17

theproshin
Зарегистрирован: 2014-06-30
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

list = string.split()
[list.__setitem__(list.index(i), j) for i in list for j in dd if j in i]; " ".join(list)

Офлайн

#4 Янв. 6, 2015 22:27:35

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

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]



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Янв. 6, 2015 22:27:53)

Офлайн

#5 Янв. 6, 2015 22:30:55

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

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

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

# -*- coding: utf-8 -*-
import re
dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
print re.sub('|'.join(dd), '', string)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#6 Янв. 6, 2015 22:42:33

theproshin
Зарегистрирован: 2014-06-30
Сообщения: 7
Репутация: +  1  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

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)

Офлайн

#7 Янв. 6, 2015 23:11:57

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

theproshin
ajib6ept, генератор нужен лишь изменить объект, его вывод нам неважен

все увидел, невнимательно посмотрел



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#8 Янв. 7, 2015 06:10:41

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

Друзья, простите, совсем забыл про саму замену. Необходимо все вхождения из 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]

Отредактировано Dobrodel (Янв. 7, 2015 06:32:41)

Офлайн

#9 Янв. 7, 2015 06:32:02

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

dd=['word1','word2','word3']
string = 'word1word word word2 word3word fdsghg'
for i in dd: string = string.replace(i, '')
print string



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Янв. 7, 2015 06:34:08

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Как элегантно заменить слова из списка в строке?

Благодарю, то что надо))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version