在python中对具有浮点值的列进行排序

时间:2014-03-25 15:07:40

标签: python sorting numpy scipy

这是我的清单:

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个。 我尝试了很多方法,但无法弄清楚。 有什么建议吗?

4 个答案:

答案 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]