Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 29, 2009 13:03:45

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

множественная замена

expee
Да, забыл присваивание сделать smile А на печать тебе нужно выводить не на каждой итерации цикла, а после завершения цикла.
выводит только первый вариант и он не то что нужно



Офлайн

#2 Дек. 29, 2009 13:08:58

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

множественная замена

>>> import re
>>> i = 'мама мыла раму в больнице'
>>> print re.split(' ', i)
['\xac\xa0\xac\xa0', '\xac\xeb\xab\xa0', '\xe0\xa0\xac\xe3', '\xa2', '\xa1\xae\xab\xec\xad\xa8\xe6\xa5']
>>> text = re.split(' ', i)
>>> print text[0] + " " + text[2] + " " + text[1]
мама раму мыла
>>>

Отредактировано (Дек. 29, 2009 13:18:51)

Офлайн

#3 Дек. 29, 2009 13:12:36

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

множественная замена

sypper-pit
Код:

>>> import re
>>> i = ‘мама мыла раму в больнице’
>>> print re.split(' ', i)

>>> print text + “ ” + text + “ ” + text
мама раму мыла
>>>
хароший вариант =) мне нравится , но что делать если у меня более 1000 слов и они переодически меняются местами ?

я извращался : засовывал в метод .replace кортежи списки и всякую другую хню , в общем матюкалось на буфер. вот я и решил спросить может кто сталкивался



Отредактировано (Дек. 29, 2009 13:16:03)

Офлайн

#4 Дек. 29, 2009 13:14:19

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

множественная замена

sonniy, что значит не то, что нужно? Выводит: “ мыла в больнице”. Как ты и хотел нужны слова заменяются на пробелы.

i = 'мама мыла раму в больнице'
>>> for word in ['мама', 'раму']:
... i = i.replace(word, ' ')
...
>>> print i
мыла в больнице
sypper-pit, ты же сам говорил, что строка может быть любой длины и т.д. а тут такое :) если уж делать со сплитом (кстати, глупо при разбиении по пробелу использовать модуль re. у строковых объектов есть модуль split), то можно разбить строку на слова и каждое слово сравнивать со словом из “блек-листа” и если оно там есть, то удалять его из списка. а в конце преобразовать список в строку.



Отредактировано (Дек. 29, 2009 13:17:11)

Офлайн

#5 Дек. 29, 2009 13:19:50

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

множественная замена

ну тут явно или неявно придется использовать цикл. можно его просто развернуть.

egg = 'мама мыла раму в больнице'.replace('мама',' ').replace('раму',' ')
или с регуляркой
egg = re.sub('мама|раму',' ','мама мыла раму в больнице')
а если слов много, то лучше смотреть в сторону алгоритма Ахо-Корасика
http://en.wikipedia.org/wiki/Aho-Corasick_algorithm



Офлайн

#6 Дек. 29, 2009 13:20:08

sonniy
От:
Зарегистрирован: 2009-12-18
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

множественная замена

expee
sonniy, что значит не то, что нужно? Выводит: “ мыла в больнице”. Как ты и хотел нужны слова заменяются на пробелы.

Код:

i = ‘мама мыла раму в больнице’
>>> for word in :
… i = i.replace(word, ‘ ’)

>>> print i
мыла в больнице
сорри , что то глюконуло, или меня, или комп =) … вроде работает ) спс



Офлайн

#7 Дек. 29, 2009 13:20:23

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

множественная замена

sonniy
тогда придётся рисовать более сложные выражения с поисками по совпадениям слов и делать разного рода циклы.

Офлайн

#8 Дек. 29, 2009 16:36:50

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

множественная замена

' '.join(filter(lambda word: word not in ['мама','раму'], s.split(' ')))
:D



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version