这是我的清单:
vec = [[(0, 6.369426751591834e-05),
(1, 6.369426751591834e-05),
(2, 6.369426751591834e-05),
(3, 6.369426751591834e-05),
(4, 6.369426751591834e-05),
(5, 6.369426751591834e-05),
(6, 6.369426751591834e-05),
(7, 0.0007714083510261222),
(8, 6.369426751591834e-05),
...........................
(4995, 6.369426751591834e-05),
(4996, 6.369426751591834e-05),
(4997, 6.369426751591834e-05),
(4998, 6.369426751591834e-05),
(4999, 6.369426751591834e-05)]]
我想基于具有浮点值的第二列对其进行排序。另外如何从输出列表中打印前10个。 我尝试了很多方法,但无法弄清楚。 有什么建议吗?
答案 0 :(得分:3)
sorted(vec[0], key=lambda x: x[1])
vec [0]只是因为你有一个嵌套列表...通常它只是vec
答案 1 :(得分:2)
通常,您可以使用operator.itemgetter(i)
作为排序的i
按容器中的key
值进行排序:
from operator import itemgetter
vec[0] = sorted(vec[0], key=itemgetter(1))
在您的示例中,删除了一些重复项:
>>> vec = [[(0, 6.369426751591834e-05),
(7, 0.0007714083510261222),
(8, 6.369426751591834e-05)]]
>>> sorted(vec[0], key=itemgetter(1))
[(0, 6.369426751591834e-05),
(8, 6.369426751591834e-05),
(7, 0.0007714083510261222)]
答案 2 :(得分:2)
numpy
这样做的方式:
In [7]:
AV=np.array(vec)
AV[:,np.argsort(AV[:,:,1])]
Out[7]:
array([[[[ 0.00000000e+00, 6.36942675e-05],
[ 1.00000000e+00, 6.36942675e-05],
[ 2.00000000e+00, 6.36942675e-05],
[ 3.00000000e+00, 6.36942675e-05],
[ 4.00000000e+00, 6.36942675e-05],
[ 5.00000000e+00, 6.36942675e-05],
[ 6.00000000e+00, 6.36942675e-05],
[ 8.00000000e+00, 6.36942675e-05],
[ 4.99500000e+03, 6.36942675e-05],
[ 4.99600000e+03, 6.36942675e-05],
[ 4.99700000e+03, 6.36942675e-05],
[ 4.99800000e+03, 6.36942675e-05],
[ 4.99900000e+03, 6.36942675e-05],
[ 7.00000000e+00, 7.71408351e-04]]]])
有一个np.set_printoptions()
用于控制打印选项。但是,无法仅打印前10行,您可以打印第一行n
行和最后n
行:np.set_printoptions(threshold=a_samll_number, edgeitems=n)
答案 3 :(得分:1)
当你要求打印前十个时:
srtd = sorted(vec[0], lambda x: x[1])
print srtd[:10]