2011-11-02 44 views
4

例子:
从这个列表:
在Python中对多维列表进行深度排序的最有效/干净的方式是什么?

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

我想有:

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

是否有可能与 list.sort()功能还是我必须编写一个自定义循环?

+1

你确定你想要的是[[1,1,1],[2,4,9],[10,11,16]]而不是[[2,1,1 ],[4,11,16],[10,9,1]]如Max所示? –

+0

ups))我完全误解了这个问题。投票删除我的答案。 – Max

+0

是的,我想排序值,而不是嵌套列表。 – Joucks

回答

1

组组L这里的扁平化,分拣,然后重建嵌套列表,如@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)] 
+0

对我来说似乎很完美,谢谢 – Joucks

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] 

现在你可以在3

+0

我认为你的意思是L = sorted([sub [i] for sub in l for i in range(3)]) 谢谢,我会猜到 – Joucks

+0

对不起。已更新 –

相关问题