Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2010 15:47:52

ptax
От:
Зарегистрирован: 2010-09-18
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Множественная замена на разные значение

Помогите нубу :)

Как сделать множественную замену в тексте одинаковых слов, на разные.
Например, есть текст:

txt = ‘'’ text {slovo} text text text text {slovo}
test {slovo} text text text text {slovo} ‘'’

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

txt = ‘'’ text {slovo№1} text text text text {slovo№2}
test {slovo№3} text text text text {slovo№4}'''

Заранее спасибо



Отредактировано (Сен. 18, 2010 15:48:19)

Офлайн

#2 Сен. 18, 2010 16:08:07

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

Множественная замена на разные значение

Можно так:

txt = "text slovo text text text text slovo test slovo text text text text slovo"
words = ['slovo#1','slovo#2',...,'slovo#n']
parts = txt.split('slovo')
final = parts[0]
for i in range(len(words)):
final = "".join([final, words[i], parts[i+1]])



Отредактировано (Сен. 18, 2010 16:16:38)

Офлайн

#3 Сен. 18, 2010 16:29:54

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

Множественная замена на разные значение

Или так:

txt = "text slovo text text text text slovo test slovo text text text text slovo"
words = ['slovo#1','slovo#2',...,'slovo#n']
for word in words:
txt = txt.replace('slovo',word,1)



Офлайн

#4 Сен. 18, 2010 16:41:34

ptax
От:
Зарегистрирован: 2010-09-18
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Множественная замена на разные значение

Огромное спасибо.



Офлайн

#5 Май 10, 2016 05:23:18

Bugap
Зарегистрирован: 2016-05-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Множественная замена на разные значение

Доброго времени суток! Нашел две темы по сабжу и решил обновить ту, которая поновее. (ей всего-то 6 лет :) Так как начал учить Python, то не от скуки, но практики ради появилась такая задача.
Хотелось, чтобы вы подсказали более приемлемый способ решения данной задачи, - так сказать Python way.

Вводные данные: Нужно сделать двойное преобразование без использования модуля re: Список в строку, а потом строку обратно в список. На выходе должны получить идентичный список с исходным. Необходимо использовать минимально возможное количество операций. Использовать регулярные выражение НЕЛЬЗЯ!

Вот мои решения… Требуется “здоровая” критика; А за длинные имена ссылок - заранее простите:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Создаем список. Значение range(n, n) можно брать произвольно, для удобства я взял такие:
some_list = list(range(5, 15))  # [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# Преобразовываем список в строку.
str_from_list = str(some_list)  # [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Вопрос: как теперь преобразовать строку str_from_list обратно, чтобы было так:
>>> some_list == str_from_list # True
Если сделать так: str_to_list = list(str_from_list), то получим много-много запятых и апострофов

# Вариант №1
def string_to_list(txt):
    string = txt.replace('[', '')
    string = string.replace(']', '')
    string = string.replace(' ', '')
    string = string.split(',')
    lst = []
    for char in string:
        lst.append(int(char))
    return lst
# Вариант №2
def string_to_list_v2(txt):
    del_char = ["[", "]", " ", "'"]
    empty_str = ''
    lst = []
    for char in txt:
        if char not in del_char:
            empty_str += char
    empty_str = empty_str.split(",")
    for char in empty_str:
        lst.append(int(char))
    return lst
# Преобразовываем обратно в список и ссылки делаем короче для удобства вывода
root = some_list
var_1 = string_to_list(str_from_list)
var_2 = string_to_list_v2(str_from_list)
inspection = root == var_1 == var_2
# Вывод. + вспомогательные данные.
print(root, type(root))
print(str_from_list, type(str_from_list))
print(str_to_list, type(str_to_list))
print(var_1, type(var_1))
print(var_2, type(var_2))
print("{0} == {1} == {2} is {3}".format('root', 'var_1', 'var_2', inspection))

Офлайн

#6 Май 10, 2016 12:52:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Множественная замена на разные значение

>>> lst = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> 
>>> list_to_string = str(lst)
>>> string_to_list = list(map(int, list_to_string[1:-1].split(', ')))
>>> string_to_list
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

Можно и так, но eval() не принято использовать
>>> eval(list_to_string)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>



Отредактировано py.user.next (Май 10, 2016 12:54:31)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version