В файле записано не более 100 чисел отсортировать их по возрастанию суммы цифр python
Прочитать из файла числа, отсортировать их по возрастанию, результат записать в новый файл.
большая часть программы есть, но нужно отсортировать их. и если можно то прокомментировать полностью всю программу
Последний раз редактировалось Stilet; 31.03.2013 в 11:03 .Где farr:arr - т.е. типа массива, что считываем из файла.
Все это писал с потолка, не проверял.
inc(v);
пишет что процедура с параметрами указанных типов не найдена
а можно просто в мою программу добавить сортировку и все? и что б так ее не усложнять?!
Последний раз редактировалось Stilet; 01.04.2013 в 21:39 .зачем в паскале такие сложности? это же не С++.. по моему никакие указатели не нужны для создания функций для массивов ибо из program они все глобальные.
Я код не понял, он получается у вас считывает цифорку из файла в переменную и переписывает в другой файл. Затем переприсваивает переменную. Как вы собираетесь сортировать без массива?
процедура с параметрами указанных типов не найдена |
а можно просто в мою программу добавить сортировку и все? и что б так ее не усложнять?! |
без процедур - это очень легко - весь код, который находится внутри процедуры запишите в основной программе (только не забывайте формальные параметры менять на фактическое значение) и всё. Это просто.
теперь по поводу указателей.
Лика, какой у Вас Паскаль? в некоторых версиях паскаля есть нормальные динамические массивы.
Можно использовать их.
А, возможно, что вас устроит и такой вариант. использовать статический массив.
Этот вариант намного проще того, что предложил Stilet, но недостаток в том, что этот способ имеет ограничение на количество обрабатываемых записей.
для всех остальных типов коллекций. Давайте вначале посмотрим на отличие в их вызовах. Если у нас имеется какой-либо упорядоченный список:
то этот объект имеет встроенный метод sort, который меняет его состояние и расставляет элементы по возрастанию:
Получим измененный список:
А вот коллекции кортежи или строки:
не имеют такого встроенного метода и попытка их отсортировать, записав:
приведет к ошибке. Для их сортировки как раз и можно воспользоваться второй функцией sorted:
на выходе получим упорядоченный список
Обратите внимание, чтобы мы не передавали в качестве аргумента функции sorted, на выходе будем получать именно список отсортированных данных. В данном случае передаем кортеж, а получаем – список.
Или же, со строкой:
результатом будет упорядоченная коллекция из символов:
Причем, эта функция не меняет исходные коллекции b и c, она возвращает новый список с отсортированными данными. В то время как метод sort для списка меняет этот список. Вот на это следует также обращать внимание. То есть, если нам нужно сохранить результат сортировки в переменной, это делается так:
и res будет ссылаться на список:
Также следует иметь в виду, что сортировка данных возможна для однотипных элементов: или чисел, или строк, или кортежей, но не их комбинаций. Например, вот такой список:
отсортировать не получится:
возникнет ошибка, что строку нельзя сравнивать с числом. И то же самое с функцией sorted:
Если уберем последний элемент:
то все будет работать:
И этот пример также показывает, что список можно сортировать и с помощью метода sort и с помощью функции sorted. Разница только в том, что метод sort не создает новой коллекции, а меняет уже существующую. Функция же sorted не меняет исходную коллекцию, а создает новую с отсортированными элементами. Поэтому, для изменения коллекции a здесь следует записывать такую конструкцию:
Оба этих подхода к сортировке поддерживают необязательный параметр
который определяет порядок сортировки: по возрастанию (False) или по убыванию (True). По умолчанию стоит значение reverse=False. Если мы запишем его вот так:
то получим сортировку по убыванию:
И то же самое с методом sort:
Своя сортирующая функция
Язык Python позволяет создавать свои сортирующие функции для более точной настройки алгоритма сортировки. Давайте для начала рассмотрим такой пример. Пусть у нас имеется вот такой список:
и мы хотим, чтобы вначале стояли четные элементы, а в конце – нечетные. Для этого создадим такую вспомогательную функцию:
И укажем ее при сортировке:
Мы здесь используем именованный параметр key, который принимает ссылку на сортирующую функцию. Запускаем программу и видим следующий результат:
Разберемся, почему так произошло. Смотрите, функция funcSort возвращает вот такие значения для каждого элемента списка a:
И, далее, в sorted уже используются именно эти значения для сортировки элементов по возрастанию. То есть, сначала, по порядку берется элемент со значением 4, затем, 6 и потом 2. После этого следуют нечетные значения в порядке их следования: 1, 3, 5. В результате мы получаем список:
А теперь, давайте модифицируем нашу функцию, чтобы выполнялась сортировка и самих значений:
Здесь четные значения возвращаются такими как они есть, а к нечетным прибавляем 100. В результате получим:
Здесь элементам нашего списка ставятся в соответствие указанные числа, и по этим числам выполняется их сортировка. То есть, эти числа можно воспринимать как некие ключи, по которым и происходит сортировка элементов списка. Поэтому в Python такую сортировку называют сортировкой по ключам.
Конечно, здесь вместо определения своей функции можно также записывать анонимные функции, например:
Получим ранее рассмотренный результат:
Или, то же самое можно делать и со строками:
Отсортируем их по длине строки:
['Тверь', 'Псков', 'Москва', 'Рязань', 'Смоленск']
Или по последнему символу, используя лексикографический порядок:
['Москва', 'Псков', 'Смоленск', 'Тверь', 'Рязань']
Или, по первому символу:
['Москва', 'Псков', 'Рязань', 'Смоленск', 'Тверь']
И так далее. Этот подход часто используют при сортировке сложных структур данных. Допустим, у нас имеется вот такой список из книг:
И нам нужно его отсортировать по возрастанию цены (последнее значение). Это можно сделать так:
На выходе получим список:
[('Мертвые души', 'Гоголь Н.В.', 190), ('Евгений Онегин', 'Пушкин А.С.', 200), ('Муму', 'Тургенев И.С.', 250), ('Мастер и Маргарита', 'Булгаков М.А.', 500)]
Вот так можно выполнять сортировку данных в Python.
Задания для самоподготовки
1. Используя сортировку, найдите первые три наименьшие значения в списке:
Сам список должен оставаться неизменным.
2. Отсортируйте список:
digs = (-10, 0, 7, -2, 3, 6, -8)
так, чтобы сначала шли отрицательные числа, а затем, положительные.
3. Пусть имеется словарь:
Необходимо вывести телефонные номера по убыванию чисел, указанных в ключах, то есть, в порядке:
Видео по теме
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Метод List sort() в Python сортирует элементы списка в порядке возрастания.
В Python есть встроенная функция sorted(), которая используется для создания отсортированного списка из итерируемого объекта.
1. Использование метода List sort() по умолчанию
По умолчанию метод list sort() в Python упорядочивает элементы списка в порядке возрастания. Это также естественный способ сортировки элементов.
Элементы также могут быть символами или числами, и метод sort() продолжит сортировку в порядке возрастания.
2. Обратная сортировка списка
Если вы хотите, чтобы сортировка выполнялась в обратном порядке, передайте обратный аргумент, как True. Мы можем использовать это для сортировки списка чисел в порядке убывания.
3. Сортировка вложенного списка
Если мы вызываем функцию списка sort() для вложенного списка, для сортировки используются только первые элементы из элементов списка. Давайте разберемся в этом примере.
Понятно, что сортировка производится по первому элементу вложенного списка. Но иногда нам нужно отсортировать вложенный список по позициям разных элементов.
Допустим, вложенный список содержит информацию об имени, возрасте и поле человека. Давайте посмотрим, как отсортировать этот вложенный список по возрасту, который является вторым элементом вложенного списка.
Мы используем ключевой аргумент, чтобы указать элемент, который будет использоваться для целей сортировки. Функция custom_key возвращает ключ для сортировки списка.
4. Пользовательская логика для сортировки списка
Мы также можем реализовать вашу собственную логику для сортировки элементов списка.
В последнем примере мы использовали возраст как ключевой элемент для сортировки нашего списка.
Но есть такая поговорка: «Сначала дамы!». Итак, мы хотим отсортировать наш список таким образом, чтобы женский пол имел приоритет над мужским. Если пол двух человек совпадает, младший получает более высокий приоритет.
Итак, мы должны использовать ключевой аргумент в нашей функции сортировки. Но функцию сравнения нужно преобразовать в ключ.
Итак, нам нужно импортировать библиотеку под названием functools. Мы будем использовать функцию cmp_to_key(), чтобы преобразовать compare_function в key.
Список сначала сортируется по полу. Затем он сортируется по возрасту людей.
5. Сортировка списка объектов
Сортировка по умолчанию работает с числами и строками. Но это не будет работать со списком настраиваемых объектов. Посмотрим, что произойдет, когда мы попытаемся запустить сортировку по умолчанию для списка объектов.
В этом случае мы должны в обязательном порядке предоставить ключевую функцию для указания поля объектов, которое будет использоваться для сортировки.
Мы также можем использовать модуль functools для создания пользовательской логики сортировки для элементов списка.
Я пытаюсь отсортировать цифры целого числа любой длины в порядке возрастания без использования строк, массивов или рекурсии.
Я уже выяснил, как получить каждую цифру целого числа с делением по модулю:
но я не знаю, как упорядочить цифры без массива.
не беспокойтесь о IO класс, это пользовательский класс наш профессор дал нам.
есть очень простой алгоритм, который использует только целые числа:
выводит 1123447 . Идея проста:
- вы берете текущую цифру числа, которое хотите отсортировать (назовем ее N)
- вы проходите через все цифры в уже отсортированном номере (назовем его S)
- если текущая цифра в S меньше текущей цифры в N, вы просто вставляете цифру в текущую позицию в S. В противном случае вы просто перейдите к следующей цифре в с.
эта версия алгоритма может сортировать в обоих ASC в порядках desc, вам просто нужно изменить условие.
кроме того, я предлагаю вам взглянуть на так называемый Radix Sort, решение здесь берет некоторые идеи из сортировки radix, и я думаю, что сортировка radix является общим случаем для этого решения.
это 4 строки, основанные на for вариант цикла вашего цикла while с небольшим Java 8 spice:
Я предполагаю, что вам разрешено использовать хэширование.
Как сортировать число без использования массива, строки или api сортировки? Ну, вы можете отсортировать число с помощью следующих простых шагов (если слишком много читать, то см. Вывод отладки ниже, чтобы получить представление о том, как выполняется сортировка):
- получить последнюю цифру числа, используя (цифра = число % 10)
- разделить число, чтобы последняя цифра исчезла (число /= 10)
- цикл через цифры номера (который не имеет цифры) и проверить, если цифра самый маленький
- если новая меньшая цифра найдена, замените цифру = наименьшая цифра и продолжайте искать до конца
- в конце цикла вы нашли наименьшую цифру, сохраните ее (store = (store * 10) + digit
- теперь, когда вы знаете, что это наименьшая цифра, удалите эту цифру из числа и продолжайте применять вышеуказанные шаги к оставшемуся числу, и каждый раз, когда меньшая цифра найдена, добавьте ее в магазин и удалите цифру из числа (если цифра повторяется в номер, затем удалите их все и добавьте их в магазин)
Я предоставил код с двумя циклами while в основном методе и одной функции. Функция ничего не делает, но строит новое целое число, исключая цифру, которая передается, например, я передаю функцию 451567 и 1, и функция возвращает мне 45567 (в любом порядке, не имеет значения). Если эта функция передается 451567 и 5, то она находит как 5 цифр в номере, так и добавляет их в хранилище и возвращает номер без 5 цифр (это избежать дополнительной обработки).
отладка, чтобы узнать, как он сортирует целое число:
последняя цифра: 7 из числа: 451567
Subchunk является 45156
Subchunk является 4515
Subchunk составляет 451
Subchunk составляет 45
Subchunk составляет 4
Smalled цифра в 451567 составляет 1
Магазин : 1
Удалить 1 из 451567
Уменьшенное число: 76554
Последняя цифра: 4 из числа: 76554
Subchunk это 7655
Subchunk составляет 765
Subchunk составляет 76
Subchunk составляет 7
Smalled цифра в 76554 составляет 4
магазин : 14
Удалить 4 из 76554
Уменьшенное число: 5567
Последняя цифра: 7 из числа: 5567
Subchunk составляет 556
Subchunk составляет 55
Subchunk составляет 5
Smalled цифра в 5567 составляет 5
магазин : 145
Удалить 5 из 5567
найдена повторная минимальная цифра 5. Магазин является : 145
повторенная минимальная цифра 5 добавлена в магазин. Обновленный магазин: 1455
Уменьшенное число: 76
Последняя цифра: 6 из числа: 76
Subchunk составляет 7
Smalled цифра в 76 составляет 6
магазин : 14556
Удалить 6 из 76
Уменьшенное число: 7
Последняя цифра: 7 из числа: 7
Smalled цифра 7-это 7
магазин : 145567
Удалить 7 из 7
Сокращается число : 0
возрастающий порядок 451567 - 145567
Читайте также: