Проблема с сортировкой множественного списка
Пытаюсь отсортировать ряд во множественном списке , а на выходе получаю None . Подскажите пожалуйста в чем проблема .
ink = [
[5, 8, 1, 7, 9, 2],
[5, 4, 1, 8, 9, 2],
[5, 8, 6, 3, 0, 2],
]
print(ink[1].sort())
Ответы (2 шт):
Метод .sort()
сортирует список inplace, то есть он ничего не возвращает (если быть точным - возвращает None), а отсортированный список занимает место старого. Чтобы посмотреть результат, надо так:
ink = [
[5, 8, 1, 7, 9, 2],
[5, 4, 1, 8, 9, 2],
[5, 8, 6, 3, 0, 2],
]
ink[1].sort()
print(ink[1])
или так:
ink = [
[5, 8, 1, 7, 9, 2],
[5, 4, 1, 8, 9, 2],
[5, 8, 6, 3, 0, 2],
]
print(sorted(ink[1]))
но в последнем случае, отсортированный список нигде не будет сохранен.
UPD
Я добавлю ответ на вопрос из комментария - что делать если сортировать надо не строки, а столбцы. На мой взгляд, самый простой способ это использовать numpy
, так как базовый питон воспринимает исходный объект как список списков, а numpy
- как двумерный массив, у которого есть и строки и столбцы.
import numpy as np
ink = [
[5, 8, 1, 7, 9, 2],
[5, 4, 1, 8, 9, 2],
[5, 8, 6, 3, 0, 2],
]
# конвертируем список списков в массив numpy
ink_np = np.array(ink)
# сортируем какой-то столбец (например, по индексу 1)
ink_np[:, 1].sort()
# если есть необходимость, конвертируем обратно в список списков
ink = ink_np.tolist()
print(ink)
Метод .sort()
работает прямо с оригинальным списком, изменяя его на месте.
В Питоне принято, что такие методы возвращают None
, что вы и получили.
Вы можете или
сначала сортировать, затем выводить (измененный) оригинальный список:
ink[1].sort() print(ink[1])
или
применить функцию
sorted()
с вашим списком между скобками:print(sorted(ink[1]))
т.к. функция
sorted()
возвращает новый, упорядоченный список, не меняя оригинальный.