Сортировка слов в тексте по алфавиту и длине в Python 3




Задание: пользователь должен ввести с клавиатуры произвольный текст, который должен сначала отсортироваться по алфавиту (каждое слово по алфавиту), а затем каждое слово должно быть остортировано по длине. Результаты должны быть выведены на экран.
Версия Python 3.5
Когда читаешь документацию или смотришь уроки по Питону, всё предельно ясно и просто. А вот когда приходит время для практических заданий, оказывается всё не так просто, как казалось ранее. По данной задаче были попытки найти простое и понятное решение в гугле по запросам «сортировка строк python», «сортировка кортежа python» (были предположения перевести слова в кортеж), «слова по алфавиту в тексте python», «отсортировать текст по алфавиту python», «сортировка по алфавиту python», «перевести строку в список» и даже «перевести список в строку». В результате моих мучений и помощи со стороны были реализованы простые решения данной задачи.
Вывод на экран введённого текста .
Для начала определим переменную, которая будет записывать и выводить затем введённый пользователем произвольный текст. Затем выведем на экран значение переменной при помощи оператора вывода print. Здесь всё просто.
text=str(input("Enter text: ")) print(text)
Сортировка символов в списке по алфавиту .
При помощи функции sorted() отсортируем по алфавиту но не каждое слово, а каждый символ. В задаче этого не было, но на всякий случай оставлю и этот вариант здесь. Чтобы функция работала, создаём новую переменную, в которую складываем все символы отдельно и затем выводим их по алфавиту.
newList = sorted(text) print(newList) #Выведется в списке отсортированный по алфавиту каждый символ в тексте
Сортировка списка из слов по алфавиту .
Преобразование строки в список слов можно выполнить при помощи функции split() по формуле (синтаксису): S(или любая другая переменная).split(символ). То есть, происходит по сути разбиение строки по определённому разделителю, в данном случае — по пробелу. Правда, по такому коду отсортируются слова по алфавиту именно в списке (с полным синтаксисом списков: квадратными скобками и заключение каждого слова в кавычки). Немного не то опять, что нам хотелось бы получить в решении задания.
n=sorted(text.split()) print(n) #Выведется в списке отсортированные по алфавиту слова, что были в ведённом пользователем тексте
Сортировка слов в строке по алфавиту .
А вот код ниже с использованием той же функции split() и цикла путём итерирования слов в тексте будут выведены на экран отсортированные по алфавиту введённые пользователем слова текста. А чтобы при итерации каждое слово не было с новой строки (как по умолчанию), дополнительно введём переменную e, с помощью которой слова будут выведены в одну строку, а не в столбик.
w=text.split() e="" for r in sorted(w): e=e+" " +r print(e) #Выведется в строке сортировка слов из введённого пользователем текста по алфавиту
Сортировка слов по длине .
Пришло время отсортировать слова в тексте по их длине. Здесь также используем split() для разделения слов в тексте. Теперь нужно отсортировать слова по длине. Для этого нужно создать анонимную функцию (содержащую лишь одно выражение определения длины слова) при помощи инструкции lambda.
l = text.split() q="" for i in sorted(l,key=lambda a: len(a)): q = q + " " + i print(q) #Выведется в строке отсортированные в порядке возрастания количества символов слова из введённого пользователем текста
Вывести слова в алфавитном порядке
1) Дана строка, состоящая из слов. Вывести все слова в алфавитном порядке.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывести всех друзей в алфавитном порядке с их способами спасения в обратном алфавитном порядке
«Да, немного страшновато, — сказал Пятачок сам себе, — быть Очень Маленьким Существом, совершенно.

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

Напечатать слова в алфавитном порядке
Дана непустая последовательность слов из строчных русских букв; между соседними словами — запятая.
Вывести на экран в алфавитном порядке все буквы
Дан файл с текстом на русском языке. Вывести на экран в алфавитном порядке все буквы, входящие в.
Вывести в алфавитном порядке гласные буквы входящие в каждое слово текста
Дана непустая последовательность слов из строчных русских букв; между соседними словами – запятая.
Python: сортировка списков методом .sort() с ключом — простыми словами
Поводом опубликовать пост стало то, что при детальном изучении списков (массивов) в Python я не смог найти в сети ни одного простого описания метода сортировки элементов с использованием ключа: list.sort(key=. ).
Может быть, конечно, это мне так не повезло и я долго понимаю простые для всех вещи, однако я думаю, что приведенная ниже информация будет весьма полезна таким же начинающим питонистам, как и я сам.
Итак, что мы имеем. Предположим, у нас есть список, который мы бы хотели отсортировать — и состоит он из трех строк разной длины в определенной последовательности:
sortList = [‘a’, ‘сс’, ‘bbb’]
Сортировка элементов массива методом .sort() производится по умолчанию лексикографически — проще говоря, в алфавитном порядке, а также от меньшего значения к большему. Поэтому если мы выполним:
то получим на выходе:
Однако метод .sort() позволяет нам изменять и принцип, и порядок сортировки.
Для изменения принципа сортировки используется ключевое слово key, которое стало доступным начиная с версии Python 2.4.
Предположим, нам хотелось бы отсортировать наш список двумя способами: 1. в алфавитном порядке; 2. по длине строки. Первый способ, впрочем, уже работает как сортировка по умолчанию, однако мы можем добиться таких же результатов и с помощью параметра key:
sortList = [‘a’, ‘cc’, ‘bbb’]
# Создаем «внешнюю» функцию, которая будет сортировать список в алфавитном порядке:
def sortByAlphabet(inputStr):
return inputStr[0] # Ключом является первый символ в каждой строке, сортируем по нему
# Вторая функция, сортирующая список по длине строки:
def sortByLength(inputStr):
return len(inputStr) # Ключом является длина каждой строки, сортируем по длине
print u’Исходный список: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]
sortList.sort(key=sortByAlphabet) # Каждый элемент массива передается в качестве параметра функции
print u’Отсортировано в алфавитном порядке: ‘, sortList # >>> [‘a’, ‘bbb’, ‘cc’]
sortList.sort(key=sortByLength) # Каждый элемент массива передается в качестве параметра функции
print u’Отсортировано по длине строки: ‘, sortList # >>> [‘a’, ‘cc’, ‘bbb’]
# Теперь отсортируем по длине строки, но в обратном порядке:
sortList.sort(key=sortByLength, reverse=True) # В обратном порядке
print u’Отсортировано по длине строки, в обратном порядке: ‘, sortList # >>> [‘bbb’, ‘cc’, ‘a’]
Обратите внимание, что метод .sort() производит действия с исходным списком, переставляя элементы внутри него самого, и НЕ возвращает отсортированную копию исходного списка. Для получения отсортированной копии нужно использовать метод sorted:
— либо такой же вариант, но с параметром key (аналогично описанному выше):
newList = sorted(sortList, key=sortByLength)
У метода .sorted() есть и другие параметры, но мне они показались не настолько запутанными для самостоятельного разбора.
Как вывести слова в порядке, обратном лексикографическому
Необходимо вывести слова по частоте появления в тексте (сначала самые частые), а если слова имеют одинаковую частоту, то нужно вывести их в порядке, обратном лексикографическому.
document_text = 'There are the Food Courts in the cities that seats a lot of people and caters for every taste with dishes from all around the world. The aromatic smells that come from the Food Courts arc so delicious that your mouth will water. In recent years foreign foods have become a regular part of our life.' s = document_text.replace(".", " ").lower().split() def word_frequency(s): words = <> for i in range(0, len(s)): item = s[i] count = s.count(item) words[item] = count print(sorted(words.items(), key = lambda item : item[1], reverse=True)) return 0 print(word_frequency(s))
Отслеживать
задан 9 дек 2021 в 17:50
31 4 4 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Просто используйте следующий ключ при сортировке:
print(sorted(words.items(), key = lambda item : (item[1], item[0]), reverse=True))
Т.е. будут сортироваться кортежи (частота, «слово») .
Отслеживать
ответ дан 9 дек 2021 в 17:55
13.4k 1 1 золотой знак 8 8 серебряных знаков 23 23 бронзовых знака
Два изменения: используется collections.Counter и сортируется результат сперва по счетчику, затем по слову. Результат сортировки переворачивается задом-наперед что приводит к нужному результату: сперва идут большие счетчики, затем маленькие. Если значения счетчиков одинаковы, то слова идут в обратном лексикографическом порядке:
import collections document_text = 'There are the Food Courts in the cities that seats a lot of people and caters for every taste with dishes from all around the world. The aromatic smells that come from the Food Courts arc so delicious that your mouth will water. In recent years foreign foods have become a regular part of our life.' s = document_text.replace(".", " ").lower().split() c = collections.Counter(s) print(sorted(c.items(), key=lambda item: item[::-1], reverse=True))
$ python count-and-sort.py [('the', 5), ('that', 3), ('of', 2), ('in', 2), ('from', 2), ('food', 2), ('courts', 2), ('a', 2), ('your', 1), ('years', 1), ('world', 1), ('with', 1), ('will', 1), ('water', 1), ('there', 1), ('taste', 1), ('so', 1), ('smells', 1), ('seats', 1), ('regular', 1), ('recent', 1), ('people', 1), ('part', 1), ('our', 1), ('mouth', 1), ('lot', 1), ('life', 1), ('have', 1), ('foreign', 1), ('for', 1), ('foods', 1), ('every', 1), ('dishes', 1), ('delicious', 1), ('come', 1), ('cities', 1), ('caters', 1), ('become', 1), ('around', 1), ('aromatic', 1), ('are', 1), ('arc', 1), ('and', 1), ('all', 1)]
