我有一个包含1000个三维列表的列表。
[[ 0.17 0.045 0.01]
[ 0.28 0.10 0.19]
[ 0.31 0.19 0.09]
...,
[ 0.36 0.42 0.38]
[ 0.62 0.02 0.03]
[ 0.32 0.12 0.26]]
是否有快速方法对列表中的各个组件进行排序,而不是通过迭代列表的繁琐方式?例如,在上面的例子中,如果我只有6个列表(在外部列表中),我想得到3个列表,每个列表包含按升序排序的6个元素。
[ 0.17, 0.28, 0.31, 0.32, 0.36, 0.62 ]
[ 0.02, 0.045, 0.10, 0.12, 0.19, 0.42 ]
[ 0.01, 0.03, 0.09, 0.19, 0.26, 0.38 ]
另一个小问题,如何打印所有1000个列表。如果只有100个列表,如果我使用print
语句但是对于1000个列表,则会打印所有列表,如果我使用print
,则不会打印所有1000个列表(如上所述...
打印3列表后打印)。如果我使用
for i in list_coll: print i
但是没有更直接的方法吗?
答案 0 :(得分:3)
如果你有一个列表列表,你可以获得排序列表,你可以在列表理解中使用zip
:
[sorted(entry) for entry in zip(*list_coll)]
只要它们都具有相同数量的项目,无论每个子列表中有多少项目,这都将起作用。例如:
>>> list_coll = [[1, 2, 3], [4, 5, 6], [-1, -2, -3], [7, 8, 9]]
>>> [sorted(entry) for entry in zip(*list_coll)]
[[-1, 1, 4, 7], [-2, 2, 5, 8], [-3, 3, 6, 9]]
>>> list_coll = [[1, 2, 3, 4], [5, 6, 7, 8], [-1, -2, -3, -4], [9, 10, 11, 12]]
>>> [sorted(entry) for entry in zip(*list_coll)]
[[-1, 1, 5, 9], [-2, 2, 6, 10], [-3, 3, 7, 11], [-4, 4, 8, 12]]
如果您有一个包含较少项目的子列表,那么这实际上仍然可以工作,但只能对最小子列表中的项目数进行排序。例如:
>>> list_coll = [[1, 2, 3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [-1, -2, -3], [9, 10, 11, 12, 13]]
>>> [sorted(entry) for entry in zip(*list_coll)]
[[-1, 1, 5, 9], [-2, 2, 6, 10], [-3, 3, 7, 11]]
答案 1 :(得分:2)
如果你有一个2d numpy数组,你可以在数组上使用sort
方法,并指定axis=0
:
>>> d
array([[ 0.17 , 0.045, 0.01 ],
[ 0.28 , 0.1 , 0.19 ],
[ 0.31 , 0.19 , 0.09 ],
[ 0.36 , 0.42 , 0.38 ],
[ 0.62 , 0.02 , 0.03 ],
[ 0.32 , 0.12 , 0.26 ]])
>>> d2 = d.copy()
>>> d2.sort(axis=0)
>>> d2
array([[ 0.17 , 0.02 , 0.01 ],
[ 0.28 , 0.045, 0.03 ],
[ 0.31 , 0.1 , 0.09 ],
[ 0.32 , 0.12 , 0.19 ],
[ 0.36 , 0.19 , 0.26 ],
[ 0.62 , 0.42 , 0.38 ]])
如果你想处理行而不是列,你可以转置它:
>>> d2.T
array([[ 0.17 , 0.28 , 0.31 , 0.32 , 0.36 , 0.62 ],
[ 0.02 , 0.045, 0.1 , 0.12 , 0.19 , 0.42 ],
[ 0.01 , 0.03 , 0.09 , 0.19 , 0.26 , 0.38 ]])
>>> for row in d2.T:
... print(row)
...
[ 0.17 0.28 0.31 0.32 0.36 0.62]
[ 0.02 0.045 0.1 0.12 0.19 0.42 ]
[ 0.01 0.03 0.09 0.19 0.26 0.38]
等等。