Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 125, средняя оценка - 4.72
Nerr
1 / 1 / 1
Регистрация: 08.06.2013
Сообщений: 53
#1

Замена символов в строке - Python

09.06.2013, 21:10. Просмотров 25576. Ответов 9
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста, возникла проблема.
Задаю строку GAGAUC, нужно заменить символы GAG и AUC на E и I соответственно. Но вместо этого интерпретатор перескакивает первую букву G и меняет AGA на R. В итоге получается GRUC. Так и должно быть? И если да, подскажите другой способ получить EI.(('AGA',"R") тут тоже нужна, строка на самом деле гораздо длиннее, просто застрял на этом участке).
Спасибо
Python
1
2
3
4
z=[('AGA',"R"),('AUC',"I" ),('GAG',"E" )]
s='GAGAUC'
for p in z: s=s.replace(p[0],p[1])
print s
Добавлено через 7 минут
Менять местами тоже смысла нет. Последовательность длинная, вылезет тоже самое, только позже.

http://www.cyberforum.ru/python/thread1746547.html

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 21:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Замена символов в строке (Python):

Replace: замена символов в строке на другие символы
Есть такой вот код (должен менять символы в строке на другие символы) def...

Разбиение строки не работает + замена символов в строке
1)Вот такой код, почему-то разбивает кириллицу на 16-ричное представление: #...

Замена всех символов
* Выложил здесь, т.к. требуется питоновский код Задача: получаю из веб формы...

Замена символов строки
здоровеньки , не могу решить, аж плакать охота! все перепробовал. думаю тут...

Замена символов в файле
Хочу произвести замену символов в файле с ph на f, но выдает ошибку: ...

9
pashtet-kun
127 / 115 / 33
Регистрация: 30.09.2012
Сообщений: 374
09.06.2013, 21:24 #2
интерпретатор не перескакивает - он честно выполняет твои указания заменить 'AGA', на "R"
1
Nerr
1 / 1 / 1
Регистрация: 08.06.2013
Сообщений: 53
09.06.2013, 22:23  [ТС] #3
Цитата Сообщение от pashtet-kun Посмотреть сообщение
интерпретатор не перескакивает - он честно выполняет твои указания заменить 'AGA', на "R"
А разве он не должен сначала заменить GAG на E?
0
pashtet-kun
127 / 115 / 33
Регистрация: 30.09.2012
Сообщений: 374
09.06.2013, 22:38 #4
нет конечно - он ведь перебирает список z и встречает сначала первое условие замены
1
Nerr
1 / 1 / 1
Регистрация: 08.06.2013
Сообщений: 53
09.06.2013, 23:08  [ТС] #5
Ясно, спасибо. Буду искать другие способы.
0
WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
10.06.2013, 00:02 #6
Другой способ: регулярные выражения.
Python
1
2
3
import re
S = 'GAGAUC'
S = re.sub(r'GAG', S, 'E')
Как-то так, лучше почитайте документацию
1
Nerr
1 / 1 / 1
Регистрация: 08.06.2013
Сообщений: 53
10.06.2013, 19:06  [ТС] #7
Всем спасибо, сделал через while=)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
s="GAGAUC"
m=' '
i=0
while i < len(s):
    x=s[0+i:3+i]
    if x=="AGA":
        z='R'
    if x=="AUC":
        z='I'
    if x=="GAG":
        z='E'
    m=m+z
    i=i+3
print m
Цитата Сообщение от WhiteMan Посмотреть сообщение
Как-то так, лучше почитайте документацию
Читаю=) Просто программирую только неделю, поэтому плохо пока ориентируюсь=)
0
WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
10.06.2013, 21:48 #8
Цитата Сообщение от Nerr Посмотреть сообщение
Всем спасибо, сделал через while=)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
s="GAGAUC"
m=' '
i=0
while i < len(s):
    x=s[0+i:3+i]
    if x=="AGA":
        z='R'
    if x=="AUC":
        z='I'
    if x=="GAG":
        z='E'
    m=m+z
    i=i+3
print m

Читаю=) Просто программирую только неделю, поэтому плохо пока ориентируюсь=)
У вас , Если первые три символа не совпадут с нужными, то тогда код Покажет ошибку. Используйте лучше регулярные выражения
1
helter
Эксперт по математике/физике
3741 / 2769 / 297
Регистрация: 12.03.2013
Сообщений: 5,104
10.06.2013, 21:55 #9
Nerr, вы бы оформили свой алгоритм как функцию и потестировали его. Он не работает почти никогда, как кажется. Например, вы всегда перескакиваете в строке на три позиции, даже если замены не было.

Ваша первая идея со списком пар была гораздо элегантнее, чем куча ifов (кстати, для множественного выбора предусмотрен elif). Раз порядок замен вам не важен, можете действовать примерно так: создать словарь <что_заменить>: <на_что_заменить> и проверять, является ли какое-либо поле префиксом данной строки. Если да, добавить к результату значение поля, иначе - первую букву строки и перейти к следующей позиции в строке.

Лучше не конкатенировать постоянно строки, а собрать их в список, который разом сконкатенировать методом join.

Добавлено через 1 минуту
Цитата Сообщение от WhiteMan Посмотреть сообщение
Используйте лучше регулярные выражения
А мне кажется, здесь они не нужны: ведь нет паттернов. По-моему, хватит метода startswith.
1
WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
11.06.2013, 08:58 #10
---А мне кажется, здесь они не нужны: ведь нет паттернов. По-моему, хватит метода startswith.[/QUOTE]

Паттерн- фраза, которую нужно заменить, это самое простое регулярное выражение
0
11.06.2013, 08:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2013, 08:58
Привет! Вот еще темы с решениями:

Поиск и замена символов
Имеется строка вида \r\n\t\t\t\t\t\t\t&lt;ul&gt;\r\n\t\t\t\t\t\t\t\t&lt;li...

Замена в строке
Дана строка t1 = &quot;0.27313&quot; Как заменить &quot;.&quot; на &quot;,&quot; ?

Замена в строке
Помогите решить проблему, в строке &quot;1. Повышение квалификации. Формализованные...

Замена символа в строке
В строке “ 4 * Х * 2 + 3 * Х + У * 7 – 9 = 0 ” все вхождения символа “Х”...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru