2016-09-11 3 views
0

У меня есть вложенный список: list = [[3,2,1],[8,7,9],[5,6,4]]Python: сортировка Подсписка значения в вложенном списке

Я хочу, чтобы отсортировать каждый подсписок в порядке возрастания. Мой, хотя и должен был перебирать список, но он хочет только отсортировать последний подсписчик.

for i in list: newList = sorted[i]

Так для этого примера цикл будет перебрать весь список, но только своего рода последний Подсписок [5,6,4]. Как мне отсортировать все подсписки?

Python версии: 2.7.10

ОС: OS X El Capitan

+0

Заменить тело цикла на 'i.sort()'. Это сортирует (под) список на месте. –

ответ

1

Вы создаете новый список и назначить его на новое имя, а затем выбросить. Используйте метод sort для сортировки каждой ссылки списка на месте. Также обратите внимание, что нет смысла использовать ссылку списка для индексации основного списка и что вам следует избегать именования переменных с тем же именем, что и встроенные функции (list).

>>> l = [[3,2,1],[8,7,9],[5,6,4]] 
>>> for i in l: 
...  i.sort() 
... 
>>> l 
[[1, 2, 3], [7, 8, 9], [4, 5, 6]] 
2

Вы заменяете значение newList на каждой итерации в цикле for. Следовательно, после окончания цикла for значение newList равно отсортированному значению последнего списка в исходном вложенном списке. Сделайте это:

>>> list = [[3,2,1],[8,7,9],[5,6,4]] 
>>> newlist = map(sorted, list) 
>>> newlist 
[[1, 2, 3], [7, 8, 9], [4, 5, 6]] 
0

Причина ваш код не работает, потому что вы создаете новый упорядоченный список (sorted() создает новый список) и присваиваем его переменной (newList). Эта переменная не используется.

В списках Python есть метод .sort(). Так что ваш код цикла может работать следующим образом

for sublist in list: 
    sublist.sort() #sorts the sublist in place 
print list #all sublists will be sorted in ascending order 

Как отметил Nehal J Вани, вы можете также использовать карту, чтобы применить одну функцию к каждому элементу списка.

newSortedList = map(sorted,list) #newSortedList will have all sublists sorted