Перейти к содержимому

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

  • автор:

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

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

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

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

Точно работает в Python 3.
Превращает ‘AA-BB-CC’ в ‘CC-BB-AA’.

Добавлено 18.05.13, 10:00
Да, если надо ‘AA-BB-CC’ превращать в ‘BB-CC-AA’ придётся написать

result = ‘-‘.join(item.split(‘-‘, maxsplit=1)[::-1])

В твоём примере, кстати, тоже надо maxsplit=1 указать

Надо дату переформатировать?

Сообщ. #3 , 18.05.13, 10:29
Unregistered
Цитата amk @ 18.05.13, 09:55
Надо дату переформатировать?

Это я придумал себе задание для изучения Питона. Зайти в папку локалхоста, перебрать все домены и прописать в виртуальные хосты, ХОСТС и т.д.

Структура у меня сейчас такая: (перечень папок)

my.site
my.test
ts.site
ts.drupal

Это означает что на локалхосте крутится 4 сайта:
site.my
test.my
site.ts
drupal.ts

Получается 1й уровень (my, ts) ставлю в название папки в начал что бы легче ориентироваться, но для имени сайта оно должно быть в конце

Добавлено 18.05.13, 10:30
amk, спасибо

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 Сообщения: 9629 Репутация: 839 Профиль Отправить 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)

Задача на Питоне

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

В моём решении переставляются местами только слова, в которых одинаковое число символов.
S=input()
S1=(S[round(len(S)-(len(S)//2)):])
S2=(S[:(round(len(S)-len(S)//2))])
print(S1,S2)

Вобщем, помогите пожалуйста решить

Лучший ответ

есть множество вариантов решения этой задачи.
вот, например:
s = «mama papa»
l = s.split(‘ ‘) ##[‘mama, ‘papa’])
s = l[1]+’ ‘+ l[0] ##’papa’+’ ‘+’mama’

или вот:
i = s.index(‘ ‘) — получаем индекс пробела в строке
s = s[i+1:]+’ ‘+s[:i]

или предыдущее в одну строку:
s = s[ s.index(‘ ‘)+1:]+’ ‘+s[: s.index(‘ ‘)]

Остальные ответы

string = input() # hello world
words = string.split()
words.reverse()
string = ‘ ‘.join(words)
print(string) # => world hello

как вариант
a,b=input().split()
print(b,a)
но самый лучший и отвечающий заданию это ответ fludardes с функцией разворота последовательности

s1 = s[:s.find(‘ ‘)] # Строка до пробела
s2 = s[s.find(‘ ‘) + 1::] # Строка после побела

Шишкин МихаилУченик (195) 2 года назад
как сделать с 3 словами

А если строка s уже есть готовая, то input убираем:
s=’ ‘.join(s.split(‘ ‘)[::-1])

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

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