PYTHON СОРТИРОВКА ДВУМЕРНОГО МАССИВА
Python является очень мощным языком для работы с двумерными массивами. Он позволяет производить множество операций, в том числе и сортировку. Сортировка двумерных массивов может быть необходима, например, для определения наименьшего или наибольшего элемента, для нахождения медианы, для ранжирования данных и т.д.
Для сортировки двумерного массива в Python можно использовать метод sort() вместе с параметром key, который указывает функцию, применяемую к каждому элементу.
arr = [[3, 2, 1], [6, 5, 4], [9, 8, 7]]arr.sort(key=lambda x: x[0])
print(arr)
# Вывод: [[3, 2, 1], [6, 5, 4], [9, 8, 7]]
В этом примере мы создали двумерный массив arr, который содержит три подмассива. Затем мы применили метод sort() к arr, используя лямбда-функцию для сравнения первых элементов (x[0]) каждого подмассива. Результат сортировки был выведен на экран, возвращая оригинальный массив arr, поскольку элементы были отсортированы только внутри своих подмассивов, но сами подмассивы не были отсортированы.
Чтобы отсортировать все подмассивы в массиве arr, мы можем использовать метод sorted() и передать его в качестве аргумента список подмассивов:
arr = [[3, 2, 1], [6, 5, 4], [9, 8, 7]]arr = sorted(arr)
print(arr)
# Вывод: [[3, 2, 1], [6, 5, 4], [9, 8, 7]]
В этом примере мы использовали метод sorted(), который принимает в качестве аргумента список подмассивов и возвращает отсортированный массив. Результат сортировки был выведен на экран, возвращая оригинальный массив arr, поскольку элементы в массиве уже были отсортированы внутри своих подмассивов, но подмассивы сами были отсортированы по возрастанию.
Информатика. Язык Python: Двумерные массивы в Python. Центр онлайн-обучения «Фоксфорд»
Двумерные массивы(списки). Сортировка. Добавить, удалить строки, столбцы
Сортировка, вставка и удаление элементов двумерного массива
Python — Урок 9: Сортировка
Пузырьковая сортировка двумерного массива
Задача из Собеседования на 160,000 Евро в Год
Сортировка двумерных массивов в Python
Сортировка пузырьком в python. Bubble sort in Python
C++ — Сортировка двумерного массива (пузырьковая)
- Python инициализация словаря
- Максимальное значение int python
- Api тестирование на python
- Python голосование по большинству
- Python сигнатура функции
- Парсинг sql запроса python
- Python список нулей
- Объединение списков python без повторений
- Получить вчерашнюю дату python
- Как передать переменную в sql запрос python
- Python декоратор overload
- Метод хука дживса python
- Парсинг requests json python
Сортировка по произвольным элементам вложенных списков
В Python можно выполнить сортировку списка на месте с помощью метода sort() :
>>> a = [10,3,4,1,9] >>> a.sort() >>> a [1, 3, 4, 9, 10]
Отметим, что есть аналогичная списковому методу sort() встроенная функция sorted() , которая не изменяет последовательность, а возвращает новую отсортированную.
Если элементы списка сами представляют собой списки, т. е. являются вложенными списками, то сортировка будет происходить по первым элементам вложенных списков, то есть в случае матрицы по первому столбцу:
>>> a = [[12,101],[2,200],[18,99]] >>> a.sort() >>> a [[2, 200], [12, 101], [18, 99]]
Что делать, если надо отсортировать не по первому столбцу? На этот случай sort() принимает необязательный аргумент key , в котором передается другая функция. Этой другой функции передается очередной элемент списка. Она может сделать с ним что угодно и вернуть что угодно. По этому «что угодно» и происходит сортировка.
Так, например, пользовательская функция может возвращать из переданного ей элемента, представляющего собой вложенный список, любой элемент этого вложенного списка. В свою очередь функция sort() будет сортировать по тем значениям, которые ей возвращаются.
В качестве примера приведем программу, в которой список представляет собой маленькую базу данных. Допустим, каждый элемент содержит сведения о юном спортсмене: имя, возраст, рост и вес. Пользователь может заказать сортировку по любому полю:
a = [['петя',10,130,35], ['вася',11,135,39], ['женя',9,140,33],['дима',10,128,30]] n = input('Сортировать по имени (1), возрасту (2), росту (3), весу (4): ') n = int(n)-1 def sort_col(i): return i[n] a.sort(key=sort_col) for i in a: print("%7s %3d %4d %3d" % (i[0],i[1],i[2],i[3]))
Здесь пользователь вводит номер поля. Число приводится к типу int , и из него вычитается единица, т. к. индексация списка начинается с нуля.
Далее определяется функция sort_col() . Ей передается аргумент i , а она возвращает n -ый элемент этого аргумента. Так, если этой функции передать вложенный список, то она вернет его n -й элемент. В данном случае тот, который хотел пользователь.
В функции sort() указывается пользовательская функция. Когда sort() извлекает очередной элемент списка, в данном случае — вложенный список, то передает этой функции. Получается, что элемент списка подменяется на то, что возвращает пользовательская функция.
В данном случае если пользователь заказывает сортировку по второму столбцу, вывод будет таким:
Сортировать по имени (1), возрасту (2), росту (3), весу (4): 2 женя 9 140 33 петя 10 130 35 дима 10 128 30 вася 11 135 39
Можно не определять обычную функцию, а использовать lambda-функцию:
a = [['петя',10,130,35], ['вася',11,135,39], ['женя',9,140,33],['дима',10,128,30]] n = input('Сортировать по имени (1), возрасту (2), росту (3), весу (4): ') n = int(n)-1 a.sort(key=lambda i: i[n]) for i in a: print("%7s %3d %4d %3d" % (i[0],i[1],i[2],i[3]))
Кроме того, метод sort() имеет еще один необязательный параметр по ключевому слову — reverse . По умолчанию он равен False . Это значит, что сортировка происходит по возрастанию. Однако если у reverse будет значение True , то сортировка будет обратной, т. е. по убыванию. В измененной программе ниже реализована возможность выбора типа сортировки:
a = [['петя',10,130,35], ['вася',11,135,39], ['женя',9,140,33],['дима',10,128,30]] n = input('Сортировать по имени (1), возрасту (2), росту (3), весу (4): ') n = int(n)-1 t = input('По возрастанию (0), по убыванию (1): ') t = int(t) a.sort(key=lambda i: i[n], reverse=t) for i in a: print("%7s %3d %4d %3d" % (i[0],i[1],i[2],i[3]))
При сортировке по весу по убыванию получим:
Сортировать по имени (1), возрасту (2), росту (3), весу (4): 4 По возрастанию (0), по убыванию (1): 1 вася 11 135 39 петя 10 130 35 женя 9 140 33 дима 10 128 30
Возможности и примеры функции sorted в Python
Функция sorted() возвращает новый отсортированный список итерируемого объекта (списка, словаря, кортежа). По умолчанию она сортирует его по возрастанию.
Сортировка строк осуществляется по ASCII-значениям.
- Возвращаемое значение — List (список).
- Синтаксис: sorted(iterable,key=None,reverse=False) .
- iterable : строка, список, кортеж, множество, словарь
- key (необязательный параметр): если указать ключ, то сортировка будет выполнена по функции этого ключа.
- reverse (необязательный параметр): по умолчанию сортировка выполняется по возрастанию. Если указать reverse=True , то можно отсортировать по убыванию.
# Сортировка строки
s2="hello"
print(sorted(s2)) # Вывод:['e', 'h', 'l', 'l', 'o']
print(sorted(s2, reverse=True)) # Вывод:['o', 'l', 'l', 'h', 'e']
# Сортировка списка
l1=[1, 4, 5, 2, 456, 12]
print(sorted(l1)) # Вывод:[1, 2, 4, 5, 12, 456]
print(sorted(l1, reverse=True)) # Вывод:[456, 12, 5, 4, 2, 1]
# Сортировка кортежа
t1=(15, 3, 5, 7, 9, 11, 42)
print(sorted(t1)) # Вывод:[3, 5, 7, 9, 11, 15, 42]
print(sorted(t1, reverse=True)) # Вывод:[42, 15, 11, 9, 7, 5, 3]
# Сортировка списка кортежей
t2=[(1, 2), (11, 12), (0, 2), (3, 2)]
print(sorted(t2)) # Вывод:[(0, 2), (1, 2), (3, 2), (11, 12)]
print(sorted(t2, reverse=True)) # Вывод:[(11, 12), (3, 2), (1, 2), (0, 2)]
# Сортировка множества
s1=
print(sorted(s1)) # Вывод:[1, 2, 3, 4, 6, 8, 11, 32]
print(sorted(s1, reverse=True)) # Вывод:[32, 11, 8, 6, 4, 3, 2, 1]
# Сортировка словаря
d1=
# Вернется список отсортированных ключей
print(sorted(d1)) # Вывод:[1, 2, 3]
# Вернется список отсортированных значений
print(sorted(d1.values())) # Вывод:['blue', 'green', 'red']
# Вернется список кортежей (ключ, значение), отсортированный по ключам.
print(sorted(d1.items())) # Вывод:[(1, 'green'), (2, 'red'), (3, 'blue')]
# Сортировка словаря в обратном порядке
print(sorted(d1, reverse=True)) # Вывод:[3, 2, 1]
print(sorted(d1.values(), reverse=True)) # Вывод:['red', 'green', 'blue']
print(sorted(d1.items(), reverse=True)) # Вывод:[(3, 'blue'), (2, 'red'), (1, 'green')]Параметр key
Итерируемый объект можно также отсортировать по функции, указанной в параметре key . Это может быть:
- Встроенная функция,
- Определенная пользователем функция,
- Лямбда-функция,
- itemgetter,
- attrgetter.
1. Встроенная функция
len() — посчитает длину объекта. Если указать len в виде параметра key, то сортировка будет выполнена по длине.
# Сортировка словаря на основе функции len
l1 =
# Возвращает список ключей, отсортированных по функции len
print(sorted(l1, key=len))
# Вывод: ['red', 'apple', 'carrot']
# Возвращает список значений, отсортированных на основе функции len
print(sorted(l1.values(), key=len))
# Вывод: ['fruit', 'color', 'vegetable']
# Сортировка списка на основе функции len
l1 = ['blue', 'green', 'red', 'orange']
print(sorted(l1, key=len))
# Вывод: ['red', 'blue', 'green', 'orange']abs() вернет абсолютно значение числа. Если задать abs для key , то сортировка будет основана на абсолютном значении.
# Сортировка списка по абсолютному значению
l1 = [1, -4, 5, -7, 9, 2]
print(sorted(l1, key=abs))
# Вывод: [1, 2, -4, 5, -7, 9]str.lower() — конвертирует все символы в верхнем регистре в нижний регистр. В таком случае список будет отсортирован так, будто бы все символы в нижнем регистре.
s1 = "Hello How are you"
# Разбивает строку и сортирует по словам
print(sorted(s1.split()))
# Вывод: ['Hello', 'How', 'are', 'you']
# Разбивает строку и сортирует после применения str.lower ко всем элементам
print(sorted(s1.split(), key=str.lower))
# Вывод: ['are', 'Hello', 'How', 'you']
d1 =
# Возвращает список ключей, отсортированный по значениям
print(sorted(d1))
# Вывод: ['Banana', 'Pears', 'apple']
# Возвращает список ключей, отсортированный после применения str.lower ко всем элементам
print(sorted(d1, key=str.lower))
# Вывод: ['apple', 'Banana', 'Pears']2. Пользовательские функции
Также можно указывать свои функции.
Пример №1: по умолчанию сортировка кортежа происходит по первому элементу в нем. Добавим функцию, которая будет возвращать второй элемент кортежа. Теперь и сортировка будет опираться на соответствующий элемент.
# напишем функцию для получения второго элемента
def sort_key(e):
return e[1]
l1 = [(1, 2, 3), (2, 1, 3), (11, 4, 2), (9, 1, 3)]
# По умолчанию сортировка выполняется по первому элементу
print(sorted(l1))
# Вывод: [(1, 2, 3), (2, 1, 3), (9, 1, 3), (11, 4, 2)]
# Сортировка по второму элементу с помощью функции sort_key
print(sorted(l1, key=sort_key))
# Вывод: [(2, 1, 3), (9, 1, 3), (1, 2, 3), (11, 4, 2)]Пример №2: можно сортировать объекты класса с помощью функций. Вот как это происходит:
- У класса Studen есть три атрибута: name , rollno , grade .
- Создаются три объекта этого класса: s1 , s2 , s3 .
- Создается список s4 , который содержит все три объекта.
- Дальше происходит сортировка по этому списку.
- Определенная функция ( sort_key ) возвращает атрибут rollno .
- В функции sorted эта функция задана для параметра key .
- Теперь sorted() возвращает список объектов Student , которые отсортированы по значению rollno .
class Student:
def __init__(self, name, rollno, grade):
self.name = name
self.rollno = rollno
self.grade = grade
def __repr__(self):
return f"--"
# Создание объектов
s1 = Student("Paul", 15, "second")
s2 = Student("Alex", 12, "fifth")
s3 = Student("Eva", 21, "first")
s4 = [s1, s2, s3]
# Сортировка списка объектов
# Создание функции, которая вернет rollno объекта
def sort_key(s):
return s.rollno
# сортировка списка объектов без ключевого параметра, вызывает TypeError
print(sorted(s4))
# Вывод: TypeError: '>' not supported between instances of 'Student' and 'Student'
# Сортировка списка объектов по атрибуту: rollno
s5 = sorted(s4, key=sort_key)
print(s5)
# Вывод: [Alex-12-fifth, Paul-15-second, Eva-21-first]3. Лямбда-функция
Также в качестве ключа можно задать лямбда-функцию. Сортировка будет выполняться по ней.
Пример №1: сортировка списка объектов класса на основе лямбда-функции, переданной для параметра key .