在Python中对多维列表进行深度排序的最有效/最干净的方法是什么?

时间:2011-11-02 22:53:03

标签: python arrays list sorting multidimensional-array

例如:
从这个清单:

list = [[10, 9, 1], [2, 1, 1,], [4, 11, 16]]

我想拥有:

print list
[[1, 1, 1], [2, 4, 9], [10, 11, 16]]

是否可以使用 list.sort()函数或者我是否必须编写自定义循环?

2 个答案:

答案 0 :(得分:1)

这是一个展平,排序,然后重建嵌套列表的例子,正如@Inerdia在上面的评论中所建议的那样。

我尽可能使用生成器和迭代器,但我确信有更聪明,更有效的方法来获得结果!

from itertools import izip

l = [[10, 9, 1], [2, 1, 1,], [4, 11, 16]]
# flatten the list and sort it
f = sorted(inner for outer in l for inner in outer)
# group it into 3s again using izip
new_list = [list(l) for l in izip(*[iter(f)]*3)]

答案 1 :(得分:0)

>>> l = [[10, 9, 1], [2, 1, 1,], [4, 11, 16]]
>>> L = sorted([sub[i] for sub in l for i in range(3)])
>>> print L
[1, 1, 1, 2, 4, 9, 10, 11, 16]

现在,您可以将L分组为3个