Рубрики
Без рубрики

Сортировка в Python 3 для конкурентного программирования

Внедрение сегодня мы обсудим много случаев для сортировки в Python 3. Это обязательно есть … Помечено с Python, конкурентоспособнымProgramming.

Введение

Сегодня мы обсудим много случаев для сортировки в Python 3. Это обязательно имеет навык в конкурентном программировании.

Объясняя функцию сортировки и ее разные аргументы.

По умолчанию функция сортировки, сортирует в порядке возрастания.

Функция сортировки может принимать два дополнительных аргумента:

A- обратный Атрибут: это берет логическое значение. Правда, если сортировка уходит, ложно, если восходит.

L = [3, 5, 1, 8, 5, 9]
L = sorted (L, reverse = True)
print (L)   # [9, 8, 5, 5, 3, 1]

B- ключ Атрибут: Требуется функция сравнения (я назову ее: Ключевая функция На протяжении всей этой статьи) для пользовательской сортировки.

Ключевая функция применяется к каждому элементу списка, чтобы создать псевдо-список новых значений, возвращаемых из этой функции. Затем сортировка выполняется в зависимости от значений этого псевдо-списка.

Примечание. Мы назначаем функцию ключевому атрибуту, а не возвращение функции.

Пример:

L = ['g', 'a', 'n', 'A', 'B', 'r', 'Y']
L = sorted (L, key = str.lower)
print (L) # ['a', 'A', 'B', 'g', 'n', 'r', 'Y']

# sorts the characters after converting them to lowercase (dynamically on the fly)

Написание нашей собственной функции сравнения.

Мы также можем написать наш пользовательский ключ функции.

Как написать функцию сортировки ключа?

Функция принимает один аргумент, который представляет элемент Iterable.

Примечание. Этот элемент может быть одной переменной, кортежным кортежом или даже списком (в списке списков).

Функция будет вычислять значение каждого элемента, что мы будем отсортироваться.

Пример:

'sorts based on the value of the (modulus by 10) of each element'
def keyFunc (element) :
    return element % 10

L = [1, 3, 6, 7, 9, 11]
L = sorted (L, key = keyFunc)
for i in L :
    print (i, end = " ")
''' 1 11 3 6 7 9 '''

Сортировка на основе I-го элемента в списке кортежей.

Предположим, что у нас есть список кортежей, и мы хотим отсортировать его на основе второго элемента каждого кортежа.

Основываясь на том, что мы узнали в последнем разделе, мы напишем нашу собственную ключевую функцию для обработки этого.

Аргумент ключевой функции соответствует кортежу, который представляет собой один элемент списка.

Мы вернем второй элемент из этого кортежа, чтобы сортировать на основе него.

Пример:

listOfTuples = [(1, 'c', 1), (0, 'a', 9), (5, 'h', 5)]
listOfTuples = sorted (listOfTuples, key = lambda iter : iter[1])
for i in listOfTuples :
    print (i)
'''
(0, 'a', 9)
(1, 'c', 1)
(5, 'h', 5)
'''

Вторичная сортировка.

Рассмотрим следующий сценарий:

Если у нас есть словарь, и ключи являются строками, значения являются целыми числами, и мы хотим отсортировать его на основе целых чисел, но если два целых числа были равными, то сортируются на основе их соответствующих строковых значений.

Для этого функция ключевой функции вернет дополнительное значение, чтобы определить наши второй критерии.

Пример:

def keyFunc (element) :
    return element[1], element[0]   # sorting based on values, then the keys

d = {'f' : 9, 'd' : 8, 'b': 8}
d = sorted (d.items (), key = keyFunc)
print (d)   # [('b', 8), ('d', 8), ('f', 9)]

Более сложные примеры

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

Если обратный атрибут взял значение true, он выполнит как первую, так и вторую сортировку в порядке убывания.

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

Пример:

d = {'b': 9, 'd' : 8, 'f' : 8}
d = sorted (d.items (), key = lambda x : (-x[1], x[0]), reverse = True)    # sorting based on ascending values, then by descending keys
print (d)   # [('f', 8), ('d', 8), ('b', 9)]

Примечание: отрицательный знак может быть добавлен только до целочисленного элемента.

Пример:

d = {'f' : 8, 'd' : 8, 'b': 9}
# we want to sort based on ascending values, then by descending keys
d = sorted (d.items (), key = lambda x : (x[1], -x[0])) # TypeError: bad operand type for unary -: 'str'

Вот это за сегодня! Я надеюсь, что вы узнали у него. Удачи!

Оригинал: “https://dev.to/abdelrahmandeghedy/sorting-in-python-3-for-competitive-programming-2m3n”