Как поменять слова местами в строке python
Перейти к содержимому

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

  • автор:

Условие

Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите получившуюся строку.

При решении этой задачи не стоит пользоваться циклами и инструкцией if .

Решение

s = input() first_word = s[:s.find(' ')] second_word = s[s.find(' ') + 1:] print(second_word + ' ' + first_word)

Комментарии

Aidana :

Добавить комментарий Отменить ответ

ЕГЭ на соточку для чайников

Прошу прощения, что так долго пропадал. Питошка вернулся, да еще и с группой в вконтакте, подписывайтесь. Помимо этого, на питошке откроется новая рубрика, в которой будут четкие объяснения всех заданий ЕГЭ и ОГЭ по информатике, внимательно прочитав которые, я уверен, вы улучшите свои баллы на экзамене ��

Строки

Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определа операция сложения (конкатенации), также определена операция умножения строки на число.

Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len :

>>> S = 'Hello' >>> print(len(S)) 5

Срезы (slices)

Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.

Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i , при этом считая, что нумерация начинается с числа 0. То есть если , то , , , , .

Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.

Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .

Или в виде таблицы:

Строка S H e l l o
Индекс S[0] S[1] S[2] S[3] S[4]
Индекс S[-5] S[-4] S[-3] S[-2] S[-1]

Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .

Срез с двумя параметрами: S[a:b] возвращает подстроку из b-a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4]==’ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).

При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).

Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0, то есть взять срез, начиная с символа с индексом 1), то можно взять срез S[1:] , аналогично если опустиить первый параметр, то срез берется от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .

Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , a+d , a+2*d и т.д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке.

Методы

Метод — это функция, применяемая к объекту, в данном случае — к строке. Метод вызывается в виде Имя_объекта.Имя_метода(параметры) . Например, S.find(«e») — это применение к строке S метода find с одним параметром «e» .

Метод find и rfind

Метод find находит в данной строке (к которой применяется метод) данную подстроку (которая передается в качестве параметра). Функция возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Например:

>>> S = 'Hello' >>> print(S.find('e')) 1 >>> print(S.find('ll')) 2 >>> print(S.find('L')) -1

Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).

>>> S = 'Hello' >>> print(S.find('l')) 2 >>> print(S.rfind('l')) 3

Если вызвать метод find с тремя параметрами S.find(T, a, b) , то поиск будет осуществляться в срезе S[a:b] . Если указать только два параметра S.find(T, a) , то поиск будет осуществляться в срезе S[a:] , то есть начиная с символа с индексом a и до конца строки. Метод S.find(T, a, b) возращает индекс в строке S , а не индекс относительно начала среза.

Метод replace

Метод replace заменяет все вхождения одной строки на другую. Формат: S.replace(old, new) — заменить в строке S все вхождения подстроки old на подстроку new . Пример:

>>> 'Hello'.replace('l', 'L') 'HeLLo'

Если методу replace задать еще один параметр: S.replace(old, new, count) , то заменены будут не все вхождения, а только не больше, чем первые count из них.

>>> 'Abrakadabra'.replace('a', 'A', 2) 'AbrAkAdabra'

Метод count

Подсчитывает количество вхождений одной строки в другую строку. Простейшая форма вызова S.count(T) возвращает число вхождений строки T внутри строки S . При этом подсчитываются только непересекающиеся вхождения, например:

>>> 'Abracadabra'.count('a') 4 >>> ('a' * 100000).count('aa') 50000

При указании трех параметров , будет выполнен подсчет числа вхождений строки T в срез S[a:b] .

Упражнения

A: Делаем срезы

Сначала выведите третий символ этой строки.

Во второй строке выведите предпоследний символ этой строки.

В третьей строке выведите первые пять символов этой строки.

В четвертой строке выведите всю строку, кроме последних двух символов.

В пятой строке выведите все символы с четными индексами (считая, что индексация начинается с 0, поэтому символы выводятся начиная с первого).

В шестой строке выведите все символы с нечетными индексами, то есть начиная со второго символа строки.

В седьмой строке выведите все символы в обратном порядке.

В восьмой строке выведите все символы строки через один в обратном порядке, начиная с последнего.

В девятой строке выведите длину данной строки.

Абракадабра
р
р
Абрак
Абракадаб
Аркдба
бааар
арбадакарбА
абдкрА
11

B: Количество слов

Дана строка, состоящая из слов, разделенных пробелами. Определите, сколько в ней слов. Используйте для решения задачи метод count .

Hello world

C: Две половинки

Дана строка. Разрежьте ее на две равные части (если длина строки — четная, а если длина строки нечетная, то длина первой части должна быть на один символ больше). Переставьте эти две части местами, результат запишите в новую строку и выведите на экран.

При решении этой задачи нельзя пользоваться инструкцией if .

Hello
loHel

D: Переставить два слова

Дана строка, состоящая ровно из двух слов, разделенных пробелом. Переставьте эти слова местами. Результат запишите в строку и выведите получившуюся строку.

При решении этой задачи нельзя пользоваться циклами и инструкцией if .

Hello world
world Hello

E: Первое и последнее вхождение

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

При решении этой задачи нельзя использовать метод count и циклы.

comfort
office

F: Второе вхождение

Дана строка. Найдите в этой строке второе вхождение буквы f , и выведите индекс этого вхождения. Если буква f в данной строке встречается только один раз, выведите число -1 , а если не встречается ни разу, выведите число -2 .

При решении этой задачи нельзя использовать метод count . Метод find (а также rfind ) можно вызывать не более двух раз. Для решения этой задачи нельзя использовать циклы.

comfort
coffee

G: Удаление фрагмента

Дана строка, в которой буква h встречается минимум два раза. Удалите из этой строки первое и последнее вхождение буквы h , а также все символы, находящиеся между ними.

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In tobbit

H: Обращение фрагмента

Дана строка, в которой буква h встречается как минимум два раза. Разверните последовательность символов, заключенную между первым и последнием появлением буквы h , в противоположном порядке.

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In th a devil ereht dnuorg eht ni eloh ehobbit

I: Дублирование фрагмента

Дана строка, в которой буква h встречается как минимум два раза. Повторите последовательность символов, заключенную между первым и последнием появлением буквы h два раза, сами буквы h повторять не надо.

Методом replace пользоваться нельзя.

In the hole in the ground there lived a hobbit
In the hole in the ground there lived a e hole in the ground there lived a hobbit

J: Замена подстроки

Дана строка. Замените в этой строке все цифры 1 на слово one .

one+one=2

K: Удаление символа

Дана строка. Удалите из этой строки все символы @ .

Bilbo.Baggins@bagend.hobbiton.shire.me
Bilbo.Bagginsbagend.hobbiton.shire.me

L: Замена внутри фрагмента

Дана строка. Замение в этой строке все появления буквы h на букву H , кроме первого и последнего вхождения.

In the hole in the ground there lived a hobbit
In the Hole in tHe ground tHere lived a hobbit

M: Вставка символов

Дана строка. Получите новую строку, вставив между каждыми соседними символами исходной строки символ * . Выведите полученную строку.

Python
P*y*t*h*o*n

N: Удалить каждый третий символ

Дана строка. Удалите из нее все символы, чьи индексы делятся на 3.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Поменять местами слова в строке

#1 Окт. 8, 2013 10:50:30

GGnoob Зарегистрирован: 2013-10-01 Сообщения: 28 Репутация: 0 Профиль Отправить e-mail

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

Всем привет!
Я знаю, что строки в питоне нельзя изменять, т.е. можно только заменять. Но как заменить строку так, чтобы сохранилось первоначальное форматирование? Допустим есть строка, слова в которой разделены и пробелами и табами. Мне нужно поменять местами два определенных слова и при этом сохранить эти самые пробелы и табы, количество которых заранее не известно

Отредактировано GGnoob (Окт. 8, 2013 12:23:29)

#2 Окт. 8, 2013 11:09:05

bismigalis Зарегистрирован: 2010-10-02 Сообщения: 449 Репутация: 47 Профиль Отправить e-mail

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

у меня сходу так получилось

l = re.split(r'(word1)(.+?)(word2)', 'garb1 word1 garb2 word2 garb3') l[1], l[-2] = l[-2], l[1] print(''.join(l)) 

Отредактировано bismigalis (Окт. 8, 2013 11:27:32)

#3 Окт. 8, 2013 11:50:51

FishHook От: Зарегистрирован: 2011-01-08 Сообщения: 8312 Репутация: 568 Профиль Отправить e-mail

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

s = "foo one bar two baz" l = ["one", "two"] for word in l: s = s.replace(word, "%s") s = s % (l[1], l[0]) print s 

#4 Окт. 8, 2013 12:22:49

GGnoob Зарегистрирован: 2013-10-01 Сообщения: 28 Репутация: 0 Профиль Отправить e-mail

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

А если эту строку надо еще найти в файле, и может быть так, что менять ничего не надо. Т.е. я пишу:

for line in open('test.txt'): if line.startswith('Some_word'): l = list(line.split()) d = l.index('word') if d > 1: l[1], l[d] = l[d], l[1] line = ''.join(l) + '\n' f.write(line) 

В этом примере форматирование строки отличается от первоначального.

Отредактировано GGnoob (Окт. 8, 2013 12:23:59)

#5 Окт. 8, 2013 13:20:59

Budulianin От: Зарегистрирован: 2011-10-18 Сообщения: 1218 Репутация: 33 Профиль Отправить e-mail

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

s = “foo one bar two baz”
l =
for word in l:
s = s.replace(word, “%s”)
s = s % (l, l)
print s

Если в строке встретится больше двух вхождений, то ошибку вывалит

#6 Окт. 8, 2013 15:37:18

FishHook От: Зарегистрирован: 2011-01-08 Сообщения: 8312 Репутация: 568 Профиль Отправить e-mail

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

Budulianin
Если в строке встретится больше двух вхождений, то ошибку вывалит

И это будет правильное поведение, иначе я не понимаю, как можно “поменять местами два определенных слова” если слов больше двух.

#7 Окт. 8, 2013 15:53:08

GGnoob Зарегистрирован: 2013-10-01 Сообщения: 28 Репутация: 0 Профиль Отправить e-mail

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

FishHook
И это будет правильное поведение, иначе я не понимаю, как можно “поменять местами два определенных слова” если слов больше двух.

Ну вообще у меня слова не повторяются, хотя представить такую ситуацию я могу.
А как это

FishHook
s = “foo one bar two baz”
l =
for word in l:
s = s.replace(word, “%s”)
s = s % (l, l)
print s

будет выглядеть на 3-ем питоне?

#8 Окт. 8, 2013 15:56:59

bismigalis Зарегистрирован: 2010-10-02 Сообщения: 449 Репутация: 47 Профиль Отправить e-mail

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

поменять местами все вхождения одного слова на все вхождения другого слова на python 3

s = "foo one bar two baz two garb one" l = ["one", "two"] for idx, word in enumerate(l): s = s.replace(word, "%s>" % idx) s = s.format(* reversed(l)) print(s) 

Отредактировано bismigalis (Окт. 8, 2013 16:04:42)

#9 Окт. 8, 2013 17:13:11

Budulianin От: Зарегистрирован: 2011-10-18 Сообщения: 1218 Репутация: 33 Профиль Отправить e-mail

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

FishHook
И это будет правильное поведение, иначе я не понимаю, как можно “поменять местами два определенных слова” если слов больше двух.

Нужно поменять цельные слова, а не любые вхождения

GGnoob
Ну вообще у меня слова не повторяются, хотя представить такую ситуацию я могу.

Слова могут не повторятся, но заменяемое слово может быть частью другого слова.

s = "foo one bar two onebaztwo" l = ["one", "two"] 

Или у тебя всё чётко и просто, поэтому такого никогда не произойдёт ? 🙂

Отредактировано Budulianin (Окт. 8, 2013 17:20:19)

#10 Окт. 8, 2013 22:29:41

py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9675 Репутация: 841 Профиль Отправить e-mail

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

GGnoob
Допустим есть строка, слова в которой разделены и пробелами и табами. Мне нужно поменять местами два определенных слова и при этом сохранить эти самые пробелы и табы

в любом случае нужно разделить строку на последовательность лексем <, >
затем обработать полученную последовательность
а затем уже объединить последовательность в строку

>>> import re >>> >>> s = ‘ garb1 word1 garb2 word2 garb3 ‘ >>> >>> lst = re.findall(r’\S+|\s+’, s) >>> print(lst) [‘ ‘, ‘garb1’, ‘ ‘, ‘word1’, ‘ ‘, ‘garb2’, ‘ ‘, ‘word2’, ‘ ‘, ‘garb3’, ‘ ‘] >>> >>> lst[3], lst[5] = lst[5], lst[3] >>> out = ».join(lst) >>> >>> print(repr(out)) ‘ garb1 garb2 word1 word2 garb3 ‘ >>>

Отредактировано py.user.next (Окт. 8, 2013 22:34:47)

20 полезных советов и приемов Python, которые вы должны знать

Python — это популярный, универсальный и широко используемый язык программирования. Он используется для науки о данных и машинного обучения, научных вычислений во многих областях, серверной веб-разработки, мобильных и настольных приложений и так далее.

Python используют многие известные компании: Google, Dropbox, Facebook, Mozilla, IBM, Quora, Amazon, Spotify, NASA, Netflix, Reddit и многие другие.

20 полезных советов и приемов Python, которые вы должны знать

Его синтаксис разработан с учетом простоты, читабельности и элегантности.

В этой статье представлены 20 полезных советов и приемов Python.

1. Zen of Python

Zen of Python, также известный как PEP 20, представляет собой небольшой текст Тима Питерса, который представляет руководящие принципы для разработки и использования Python. Его можно найти на веб-сайте Python, но вы также можете получить его в своем терминале (консоли) или блокноте Jupyter с помощью одного оператора:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one— and preferably only one —obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!

2. Цепное присваивание

Если вам нужно несколько переменных для ссылки на один и тот же объект, вы можете использовать цепное присваивание:

>>> x = y = z = 2
>>> x, y, z
(2, 2, 2)

Логично и элегантно, правда?

3. Сравнение по цепочке

Вы можете объединить несколько сравнений в одно выражение Python, объединяя операторы сравнения. Это выражение возвращает True, если все сравнения верны, или False в противном случае:

Вы можете связать более двух сравнений:

4. Многократное назначение

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

Обратите внимание, что 2, 4, 8 в первом утверждении — это кортеж, эквивалентный (2, 4, 8).

5. Более расширенное множественное назначение

Обычные множественные назначения- это не все, что может сделать Python. Вам не нужно одинаковое количество элементов слева и справа:

В этом случае x принимает первое значение (2), потому что оно приходит первым. z является последним и принимает последнее значение (8). y принимает все другие значения, упакованные в список, потому что у него есть звездочка (* y).

6. Поменять местами переменные

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

7. Слияние словарей

Один из способов объединить два или более словарей — распаковать их в новый файл:

8. Соединение строк

Если вам нужно объединить несколько строк, в итоге между ними будет один и тот же символ или группа символов, вы можете использовать метод str.join () :

9. Предварительная итерация

Если вы хотите перебрать последовательность и вам нужны как элементы последовательности, так и соответствующие индексы, вы должны использовать enumerate :

>>> for i, item in enumerate([‘u’, ‘v’, ‘w’]):
. print(‘index:’, i, ‘element:’, item)
.
index: 0 element: u
index: 1 element: v
index: 2 element: w

В каждой итерации вы получите кортеж с индексом и соответствующим элементом последовательности.

10. Обратная итерация

Если вы хотите перебрать последовательность в обратном порядке, вы должны использовать reversed :

11. Совокупные элементы

Если вы собираетесь объединять элементы из нескольких последовательностей, вы должны использовать zip :

Вы можете перебрать полученный zip-объект или преобразовать его в список или кортеж.

12. Транспонировка матрицы

Хотя люди обычно применяют NumPy (или аналогичные библиотеки) при работе с матрицами, вы можете получить транспонирование матрицы с помощью zip :

13. Уникальные значения

Вы можете удалить дубликаты из списка, который получает уникальные значения, преобразовав его в набор, если порядок элементов не важен:

14. Сортировка последовательности

По умолчанию последовательности сортируются по первым элементам:

Однако, если вы хотите отсортировать их по вторым (или другим) элементам, вы можете использовать ключ параметра и соответствующую лямбда-функцию в качестве соответствующего аргумента:

>>> sorted([x, y, z], key=lambda item: item[1])
[(4, ‘u’), (1, ‘v’), (2, ‘w’)]

Это похоже, если вы хотите получить обратный заказ:

>>> sorted([x, y, z], key=lambda item: item[1], reverse=True)
[(2, ‘w’), (1, ‘v’), (4, ‘u’)]

15. Сортировка словарей

Вы можете использовать аналогичный подход для сортировки кортежей ключ-значения словарей, полученных с помощью метода .items () :

Они отсортированы по ключам. Если вы хотите, чтобы они были отсортированы в соответствии с их значениями, вы должны указать обратные аргументы, которые соответствуют ключу:

>>> sorted(x.items(), key=lambda item: item[1])
[(‘v’, 1), (‘w’, 2), (‘u’, 4)]
>>> sorted(x.items(), key=lambda item: item[1], reverse=True)
[(‘u’, 4), (‘w’, 2), (‘v’, 1)]

16. Неформатированные f-строки

PEP 498 и Python 3.6 представили так называемые отформатированные строки или f-строки. Вы можете вставлять выражения в такие строки. Можно и просто считать строку как необработанной, так и отформатированной.

17. Получение текущей даты и времени

Python имеет встроенный модуль datetime, который универсален в работе с датами и временем. Один из его методов, .now () , возвращает текущую дату и время:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 5, 20, 1, 12, 31, 230217)

18. Получение индекса максимального (или минимального) элемента

Python не предоставляет процедуры для непосредственного получения индекса максимального или минимального элемента в списке или кортеже. К счастью, есть (по крайней мере) два способа сделать это:

>>> x = [2, 1, 4, 16, 8]
>>> max((item, i) for i, item in enumerate(x))[1]
3

Если есть два или более элементов с максимальным значением, этот подход возвращает индекс последнего:

>>> y = [2, 1, 4, 8, 8]
>>> max((item, i) for i, item in enumerate(y))[1]
4

Чтобы получить индекс первого случая, вам нужно немного изменить предыдущий оператор:

>>> -max((item, -i) for i, item in enumerate(y))[1]
3

Альтернативный способ, вероятно, более элегантный:

>>> x = [2, 1, 4, 16, 8]
>>> max(range(len(x)), key=lambda i: x[i])
3
>>> y = [2, 1, 4, 8, 8]
>>> max(range(len(y)), key=lambda i: x[i])
3

Чтобы найти индекс минимального элемента, используйте функцию min вместо max .

19. Получение декартового произведения

Встроенный модуль itertools предоставляет множество потенциально полезных классов. Одним из них является продукт, используемый для получения декартового произведения:

>>> import itertools
>>> x, y, z = (2, 8), [‘u’, ‘v’, ‘w’],
>>> list(itertools.product(x, y, z))
[(2, ‘u’, False), (2, ‘u’, True), (2, ‘v’, False), (2, ‘v’, True),
(2, ‘w’, False), (2, ‘w’, True), (8, ‘u’, False), (8, ‘u’, True),
(8, ‘v’, False), (8, ‘v’, True), (8, ‘w’, False), (8, ‘w’, True)]

20. Оператор для умножения матриц

PEP 465 и Python 3.5 представили специальный инфиксный оператор для умножения матриц @. Вы можете реализовать это для своего класса с помощью методов matmul , rmatmul и imatmul . Вот как выглядит код для умножения векторов или матриц:

>>> import numpy as np
>>> x, y = np.array([1, 3, 5]), np.array([2, 4, 6])
>>> z = x @ y
>>> z
44

Зарегистрируйтесь на Портале

и получите красивый адрес своей странички вида: senior.ua/sergey.ivanov

icon

senior.ua/ |

Потом все адреса будут Заняты 🙁

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *