Предмет: Информатика, автор: Аноним

Отсортировать по убыванию элементов последнего столбца целочисленный двухмерный массив 5×4.
На языке Python. ​

Ответы

Автор ответа: etojan
2

Ответ:

array = [[1,2,3,4,5], [5,2,5,7,2], [8,12,56,3,0], [12,12,12,12,12]]

array.sort(key = lambda x: x[-1], reverse=True)

print(array)

5*4 - это не точное описание размерности. Я сделал 4 объекта по 5 элементов, так принято измерять матрицы - сначала строки, потом столбцы, но может быть и наоборот.

Функия sort у списков опционально принимает параметр key, в который можно записать лямбду для преобразования исходных элементов массива в какие-то иные, чтоб сравнивать затем уже их.

То есть если передан key, то будут сраниваться не сами объекты массива, а то, что вернула лямбда, применённая к каждому из объектов. Вот мы как раз и хотим, чтоб сравнивались не сами массивы, а их последние элементы.

Мы знаем, что объекты массива верхнего уровня - это тоже массивы, а значит лямбда будет принимать массивы длиной 5 элементов, и для каждого из них надо будет отдать последний элемент под индексом 4. Можно было написать lambda x: x[4], но проще воспользоваться фичей питона - отрицательными индексами.

Ну и reverse указываем, потому что по умолчанию sort сортирует по возрастанию (неубыванию)


Аноним: код не правильный, сортирует не по заданию
Аноним: from random import randint
arr = [[randint(0, 100) for j in range(4)] for i in range(5)]
print('\n'.join([''.join([str(f'{i:3}') for i in row]) for row in arr]))
print()
for i in range(4):
___ for j in range(i + 1, 5):
___ if arr[i][-1] < arr[j][-1]:
______ arr[i][-1], arr[j][-1] = arr[j][-1], arr[i][-1]
print('\n'.join([''.join([str(f'{i:3}') for i in row]) for row in arr]))
Аноним: отступы только правильно расставить надо )))
etojan: Специально для тебя я и написал первый абзац. У меня на верхнем уровне строки, которых 4. У тебя наоборот, 5 строк по 4 элемента. И вместо б-гомерзкого пузырька стандартная сортировка.
Аноним: вот что подучается после твоего кода
Аноним: 1 2 3 4 5
5 2 5 7 2
8 12 56 3 0
12 12 12 12 12

12 12 12 12 12
1 2 3 4 5
5 2 5 7 2
8 12 56 3 0
Аноним: ты его вообще проверял?
Аноним: без разницы размер матрицы, должен быть отсортирован только последний столбец, а у тебя последняя СТРОКА становится первой
etojan: А ты вообще условие читал? Ты видишь разницу между "отсортировать последний столбец" и "отсортировать двумерный массив по элементам последнего столбца"?
Аноним: извиняюсь, протупил (((
Похожие вопросы
Предмет: Русский язык, автор: natka474
Предмет: Математика, автор: Асидора