/
Вопросы и ответы
/
Python
/

Как поменять местами символы в строке python

Как поменять местами символы в строке python

5 лет назад

Человек-Молекула

Ответы

0

Проще всего будет привести строку к списку, поменять элементы списка местами и вновь собрать строку.

1
2
3
4
text = 'Foobar'
l = list(text)
l[2], l[4] = l[4], l[2]
''.join(l)  # 'Foabor'

4 года назад

Ivan Mamtsev

0

Строки в Python неизменяемые: text[0] = 'x' выдаст TypeError. Чтобы поменять символы местами, строку превращают в список, меняют элементы и собирают обратно:

1
2
3
4
text = 'python'
chars = list(text)
chars[0], chars[5] = chars[5], chars[0]
print(''.join(chars))  # nythop

a, b = b, a — обмен значений в Python без временной переменной.

Через срезы

Без списка, для двух позиций i < j:

1
2
3
4
def swap(s, i, j):
    return s[:i] + s[j] + s[i + 1:j] + s[i] + s[j + 1:]

print(swap('python', 0, 5))  # nythop

Поменять соседние символы попарно

1
2
text = 'abcdef'
print(''.join(text[i + 1] + text[i] for i in range(0, len(text) - 1, 2)))  # badcfe

Для строки нечётной длины последний символ потеряется. Добавьте его отдельно: result += text[-1] if len(text) % 2 else ''.

Перевернуть строку

1
print('python'[::-1])  # nohtyp

Поменять местами все вхождения двух символов

Заменить все a на b и наоборот за один проход:

1
2
text = 'abracadabra'
print(text.translate(str.maketrans('ab', 'ba')))  # barbcbdbarb

Два вызова replace() подряд здесь не сработают: после первой замены уже не отличить исходные b от новых.

Поменять местами слова

1
2
words = 'Иван Петров'.split()
print(' '.join(reversed(words)))  # Петров Иван

Первая и последняя буква

1
2
s = 'привет'
print(s[-1] + s[1:-1] + s[0])  # тривеп

Для строки из одного символа этот код вернёт удвоенный символ, проверяйте длину заранее.

Строки и срезы разбирают в бесплатном курсе «Основы Python».

8 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845