我有一个嵌套列表:
list = [[3,2,1],[8,7,9],[5,6,4]]
我想按升序对每个子列表进行排序。我虽然是循环遍历列表,但它只想对最后一个子列表进行排序。
for i in list:
newList = sorted[i]
因此,对于这个例子,for循环将循环遍历整个列表,但只排序最后一个子列表[5,6,4]。如何对所有子列表进行排序?
Python版本:2.7.10
操作系统:OS X El Capitan
答案 0 :(得分:2)
您正在for循环中的每次迭代中替换newList的值。因此,在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]]
答案 1 :(得分: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 :(得分: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 Wani所述,您还可以使用地图将一个函数应用于列表的每个元素。
newSortedList = map(sorted,list) #newSortedList will have all sublists sorted