Изменение положения букв

#python

Вопрос:

Я пытаюсь поменять местами значения позиций.

a должно быть присвоено e и наоборот

b должно быть присвоено g и наоборот

Есть ли какой-нибудь простой способ сделать это?

Мой код :

 str1="abcdefg"
clst=list(str1)
index_lst1=[]
index_lst2=[]
final_lst=[]

for i in range (len(clst)):
    if clst[i] == 'a' or clst[i] == 'b':
        index_lst1.append(i)
    elif clst[i] == 'e' or clst[i] == 'g':
        index_lst2.append(i)
    else:
        pass

final_lst.extend(index_lst1)
final_lst.extend(index_lst2)

for i in range(len(clst)):
    x=clst[0]
    y=clst[1]
    
    if i == 0:
        b=clst[4]
        clst[0]=b
        clst[4]=x
    elif i == 1 :
        c=clst[6]
        clst[1]=c
        clst[6]=y

print(clst)
 

Ожидаемый Результат :

 egcdafb
 

Ответ №1:

Ты мог бы просто сделать это:

 str1.translate(str.maketrans("abeg", "egab"))
 

Это переводит все a <-> e и все b <-><-> g.

Пример:

 >>> "abcdefg".translate(str.maketrans("abeg", "egab"))
'egcdafb'
 

Обратите внимание, что maketrans это статический метод str класса , поэтому его обычно называют как str.maketrans() , хотя он также может быть вызван из вашей str1 строки str1.maketrans() . Обычно это делается первым способом.

Ответ №2:

 >>> str1="abcdefg"
>>> swap = {
...     'a': 'e',
...     'b': 'g',
...     'e': 'a',
...     'g': 'b',
... }
>>> ''.join(swap.get(c, c) for c in str1)
'egcdafb'
 

Ответ №3:

Попробуй:

 "".join([{"a":"e","e":"a","b":"g","g":"b"}.get(i, i) for i in "abcdefg"])
 

Если вы хотите использовать for цикл с if/elif блоком, вы можете сделать:

 str1="abcdefg"
output = ""
for c in str1:
    if c == "a":
        output  = "e"
    elif c == "b":
        output  = "g"
    elif c == "e":
        output  = "a"
    elif c == "g":
        output  = "b"
    else:
        output  = c