Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 27, 2010 22:10:20

st00nsa
От:
Зарегистрирован: 2009-01-14
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

Привет, как бы сделать замену по очереди?

a = "привет я SOME , вот тебе SOME и SOME"
somes = ["Jhony", "sosiska", "python"]


result = "Привет я Jhony , вот тебе sosiska и python"
То есть первое “SOME” в строке заминаться на первый элемент из массива, второй “SOME” на второй элемент и тд.
Разделить сплитом пробелы и пройтись по словам в массиве а потом снова пере собрать в строку, это все что пришло в голову, есть вариант изящней?



Офлайн

#2 Сен. 27, 2010 22:26:17

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Замена по очереди, или замена n-ой подстроки

.split('SOME')



Офлайн

#3 Сен. 28, 2010 10:48:15

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

Офлайн

#4 Сен. 28, 2010 12:25:41

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

for name in ["Jhony", "sosiska", "python"]:
a = a.replace( 'SOME', name, 1 )
Для питона 3.2:

a = a.replace('SOME', '{}').format( "Jhony", "sosiska", "python" )



Отредактировано (Сен. 28, 2010 13:57:20)

Офлайн

#5 Сен. 28, 2010 17:06:03

st00nsa
От:
Зарегистрирован: 2009-01-14
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

Андрей Светлов
.split('SOME')
не понял к чему это) Но спасибо за внимание.

Vader, спасибо, почему то не нашел этот пост.
Isem, спасибо.



Офлайн

#6 Сен. 28, 2010 17:15:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Замена по очереди, или замена n-ой подстроки

>>> a = “привет я SOME , вот тебе SOME и SOME”
>>> somes =

>>> parts = a.split('SOME')

>>> ret = parts + ''.join([i + j for (i, j) in zip(somes, parts)]) + parts
>>> print ret
привет я Jhony , вот тебе sosiska и python
>>>



Офлайн

#7 Сен. 28, 2010 18:08:47

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Замена по очереди, или замена n-ой подстроки

>>> import re
>>> a = "привет я SOME , вот тебе SOME и SOME"
>>> somes = ["Jhony", "sosiska", "python"]
>>> print re.sub('SOME', lambda match: somes.pop(0), a, len(somes))
привет я Jhony , вот тебе sosiska и python
..bw



Офлайн

#8 Сен. 28, 2010 22:24:18

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

:)
result = a.replace('SOME', ‘%s’) % tuple(somes)



Офлайн

#9 Сен. 29, 2010 00:38:03

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена по очереди, или замена n-ой подстроки

ofigetitelno
result = a.replace('SOME', ‘%s’) % tuple(somes)
Зачет! :)
Вот уж где действительно: “Simple is better than complex.”



Отредактировано (Сен. 29, 2010 00:40:40)

Офлайн

#10 Сен. 29, 2010 01:09:58

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Замена по очереди, или замена n-ой подстроки

> Зачет
…до первого a.count('SOME') != len(somes).

..bw



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version