如何使列表列表中的每个列表按升序排序?

时间:2014-04-30 02:34:39

标签: python list sorting

我有以下列表:

[[1, 5], [3, 7], [4, 2], [7, 8], [6, 3], [2, 5], [4, 1]]

我正在尝试按照第一个值对它们进行排序,然后使列表按升序排列:

期望的输出:

[[1, 4], [1, 5], [2, 4], [2, 5], [3, 6], [3, 7], [7, 8]]

但是,list.sort()仅提供以下内容:

>>> mylist = [[1, 5], [3, 7], [4, 2], [7, 8], [6, 3], [2, 5], [4, 1]]
>>> mylist.sort()
>>> mylist
[[1, 5], [2, 5], [3, 7], [4, 1], [4, 2], [6, 3], [7, 8]]
>>> 

当然,我总是可以循环列表列表中的每个列表并对其进行排序:

>>> mylist
[[1, 5], [2, 5], [3, 7], [4, 1], [4, 2], [6, 3], [7, 8]]
>>> for k in range(len(mylist)):
...     mylist[k] = sorted(mylist[k])
... 
>>> mylist
[[1, 5], [2, 5], [3, 7], [1, 4], [2, 4], [3, 6], [7, 8]]
>>> sorted(mylist)
[[1, 4], [1, 5], [2, 4], [2, 5], [3, 6], [3, 7], [7, 8]]

但是有一个班轮可以解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

你可以这样做:

sorted(sorted(sublist) for sublist in mylist)

答案 1 :(得分:2)

这比你的循环好一点:

for sublist in mylist:
    sublist.sort()

mylist.sort()

当然,这会更改每个子列表就地。从你的例子来看,看起来这就是你想要的,但我想我应该提一下以防万一。

答案 2 :(得分:0)

这是一个就地排序

的班轮
>>> mylist = [[1, 5], [3, 7], [4, 2], [7, 8], [6, 3], [2, 5], [4, 1]]
>>> mylist.sort(key=lambda x:x.sort() or x)
>>> mylist
[[1, 4], [1, 5], [2, 4], [2, 5], [3, 6], [3, 7], [7, 8]]