Вывод элементов подсписков в обратном порядке
Задание вывести вложенный список наоборот (каждый вложенный список в списке вывести наоборот).
Почему у меня на выводе вместо первого вложенного списка выдает None? Что я сделал не так? Или я вообще сделал задание не правильно изначально?
Вывод:
[None, [102, 7, 9], [105, 106, 102], [103, 98, 99, 100], [3, 2, 1]]
Код:
list1 = [[1, 7, 8], [9, 7, 102], [102, 106, 105], [100, 99, 98, 103], [1, 2, 3]]
for j in list1:
list1[0] = j.reverse()
print(list1)
Ответы (3 шт):
Ошибка в этой строчке:
list1[0] = j.reverse()
метод reverse не возвращает никакого результата, он просто переворачивает сам список j.
Поэтому нет смысла куда-то присваивать j.reverse() - это всегда будет None
Вместо этого надо писать так:
list1[0] = list(reversed(j))
При этом в вашем коде есть и другие ошибки.
Например, вы каждый раз новый перевёрнутый список записываете вместо одного и того же первого элемента.
Дело в том, что функция reverse() - не возвращает новый список, она изменяет исходный.
Это значит, что в результате работы функции ее значение всегда будет None.
Что можно сделать?
Можно просто не присваивать элементам вашего списка значения, а обойтись без этого:
list1 = [[1, 7, 8], [9, 7, 102], [102, 106, 105], [100, 99, 98, 103], [1, 2, 3]]
for j in list1:
j.reverse()
print(list1)
Вывод
[[8, 7, 1], [102, 7, 9], [105, 106, 102], [103, 98, 99, 100], [3, 2, 1]]
Дополнительно
Суть вашего кода - применение к каждому элементу списка функции reverse(), для таких целей можно воспользоваться встроенной функцией map(), вот документация на нее:
list1 = [[1, 7, 8], [9, 7, 102], [102, 106, 105], [100, 99, 98, 103], [1, 2, 3]]
list(map(list.reverse, list1))
print(list1)
Вывод
[[8, 7, 1], [102, 7, 9], [105, 106, 102], [103, 98, 99, 100], [3, 2, 1]]
Можно сделать через срезы и списковое включение:
list1 = [x[::-1] for x in list1]