#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