re.sub - поменять подстроки местами

Напиcать программу, которая заменит am на pm, а pm на am. Входные данные: 2:00 am 3:00 pm 10:00 pm 3:00 am 1:00 am 5:00 am 8:00 am 7:00 am 5:00 pm 8:00 pm 7:00 pm 6:00 pm 11:00 am 4:00 am 9:00 pm 6:00 am 12:00 am 12:00 pm 9:00 am 1:00 pm 11:00 pm 4:00 pm 2:00 pm 10:00 am Мой код меняет am на pm, а как добавить, чтобы и pm на am тоже менялось

import re
s=input()
rep = re.sub(r'am', lambda m: "pm",s)
print(rep) 

Ответы (4 шт):

Автор решения: rotabor

Нужно использовать промежуточное значение, которое точно не встретится в тексте, то есть сначала поменять am на промежуточное, потом pm на am, а потом промежуточное на pm.

→ Ссылка
Автор решения: strawdog

можно сделать так:

import re
a = "2:00 am 3:00 pm 10:00 pm 3:00 am 1:00 am 5:00 am 8:00 am 7:00 am 5:00 pm 8:00 pm 7:00 pm 6:00 pm 11:00 am 4:00 am 9:00 pm 6:00 am 12:00 am 12:00 pm 9:00 am 1:00 pm 11:00 pm 4:00 pm 2:00 pm 10:00 am"
res = re.sub(r'[ap]m', lambda x: {"am":"pm", "pm":"am"}.get(x.group()), a)
print(res)

2:00 pm 3:00 am 10:00 am 3:00 pm 1:00 pm 5:00 pm 8:00 pm 7:00 pm 5:00 am 8:00 am 7:00 am 6:00 am 11:00 pm 4:00 pm 9:00 am 6:00 pm 12:00 pm 12:00 am 9:00 pm 1:00 am 11:00 am 4:00 am 2:00 am 10:00 pm

→ Ссылка
Автор решения: SergFSM

конкретно для данного примера можно сделать так:

a = "2:00 am 3:00 pm 10:00 pm 3:00 am 1:00 am 5:00 am 8:00 am 7:00 am 5:00 pm 8:00 pm 7:00 pm 6:00 pm 11:00 am 4:00 am 9:00 pm 6:00 am 12:00 am 12:00 pm 9:00 am 1:00 pm 11:00 pm 4:00 pm 2:00 pm 10:00 am"
a.translate(str.maketrans('ap','pa'))

# '2:00 pm 3:00 am 10:00 am 3:00 pm 1:00 pm 5:00 pm 8:00 pm 7:00 pm 5:00 am 8:00 am 7:00 am 6:00 am 11:00 pm 4:00 pm 9:00 am 6:00 pm 12:00 pm 12:00 am 9:00 pm 1:00 am 11:00 am 4:00 am 2:00 am 10:00 pm'
→ Ссылка
Автор решения: Василий Калеев
import re
def func(x):
    if x[0] == 'am':
        return('pm')
    if x[0] == 'pm':
        return('am')
print(re.sub(r'am|pm', func, input()))
→ Ссылка