Декілька способів сортувати список у Python



Передісторія 

Виконуючи завдання із алгебри, мені потрібно було знайти "Скільки різних чотирицифрових чисел можна скласти з цифр 0, 1, 3, 5, 6, якщо в кожному числі цифри не повторюються?​"

Створюючи програму для знаходження цих всіх чисел я зрозумів, що число не може розпочинатися із 0, тому рядок (дані) введені у список повинні бути відсортовані. І останнім числом має бути 0. Тому я розглянув деякі способи форматування.

Початок програми

Для початку мені потрібно ввести числа. Звичайно можна це зробити це заздалегідь створивши список.

numeric_old = [0,7,6,4,3,6,4,8,3,9,0]

або створити генератор випадкових чисел, де я використав би бібліотеку random

from random import randint as ri

numeric = []

for n in range(15):

    numeric.append(ri(0,10))

та я вирішив вводити числа з клавіатури, бо хотів контролювати скільки нулів буде у моєму списку. Тому використавши метод map, я додав, як окремі числа у список, елементи, що буули розбиті по відступах, із рядка введеного із клавіатури 😅

numeric = list(map(int, input().split()))

print(numeric)

Сортування списку у Python. Спосіб №1. Бульбашкове сортування

Далі я спробував використати бульбашкове сортування з яким я познайомився нещодавно.

i = 6

while i > 0:

    i = 0

    for n in range(len(numeric)-1):

        if numeric[n] > numeric[n+1]:

            numeric[n], numeric[n+1] = numeric[n+1],numeric[n]

            i += 1

print(numeric)

Сортування списку у Python. Спосіб №2. Переміщення елемента в кінець списку

До цього бульбашкового сортування (що мені не допомогло) довелося шукати ще один варіант сортування. Мені потрібно було просто перемістити всі 0 у кінець. Тому я доповнив знайдений код 

i = len(numeric)

while i > 0:

    for e in range(len(numeric)-1):

        if numeric[e] == 0:

            numeric.append(numeric.pop(e))

            i -= 1

але він погано працює, якщо нулів багато. А чому - не знаю!!!

Сортування списку у Python. Спосіб №3. Відсортований ключ лямбда

Шукаючи далі способи сортування я натрапив на статтю із використанням лямда функції. Ця функція і стала на заміну попередньому способу.

nums = numeric.copy()

nums[:] = sorted(nums, key=lambda x: not x)

Сортування списку у Python. Спосіб №4. Стандарті методи та способи мови

У ті й же статті вище з'явилося посилання на документацію мови, де використовуються стандартні способи мови. Такі як методи list.sort() та sorted() 

n2 = numeric.copy()

n2.sort()

n2.reverse()

print(numeric,'\n',nums,'\n', n2)

Але вони мені не дуже допомогли у даній задачі. Натомість я буду їх використовувати у майбутніх проєктах.

Висновок

У мові програмування Python є маса цікавих способів сортувати списки та лише тобі обирати, який у даному проєкті є найбільш корисний.

Коментарі