python 多维数组排序

想到排序,先想到了生成字典再排序,实现起来很麻烦。后来找到了按照list排序的方法。


python将两个list元素一一对应转换为dict

>>>names = ['n1','n2','n3']
>>>values = [1,2,3]

>>>nvs = zip(names,values)
>>>nvDict = dict( (name,value) for name,value in nvs)



不过要实现排序,转换为dict类型后更加麻烦。

以排序为目标的话可以创建多维数组,然后使用list.sort()进行排序,排序时会根据复数数组中第一个元素进行排序[(a,x,l),(b,y,m)(c,z,n)],使用sort()函数会根据a,b,c的顺序取排列。


单个数组的排序很简单,直接用sort就能完成,如一下ipython代码:

>>>array = [4, 2, 5, 1, 3]
>>>array.sort()
>>>array
>>>[1, 2, 3, 4, 5]


多维数组的排序如直接用sort讲会按第一维的数据进行排序,如:

>>>array = [ ['b', 4], ['e', 2], ['a', 5], ['d', 1], ['c', 3] ]
>>>array.sort()
>>>array
>>>[ ['a', 5], ['b', 4], ['c', 3], ['d', 1], ['e', 2] ]


如何按第二维的数据进行排序呢,我们可以用sort函数中的key形参,代码接上,如:

>>>array.sort(key=lambda x:x[1])#lambda x:x[1]返回list的第二个数据
>>>array
>>>[ ['d', 1], ['e', 2], ['c', 3], ['b', 4], ['a', 5] ]


也可以用一个函数实现,比较直接,如:

In [55]: def sort(a):
....:   for k in xrange(len(a)):
....:     (a[k][0], a[k][1]) = (a[k][1], a[k][0])
....:   a.sort()
....:   for k in xrange(len(a)):
....:     (a[k][0], a[k][1]) = (a[k][1], a[k][0])
....:
>>>array = [ ['b', 4], ['e', 2], ['a', 5], ['d', 1], ['c', 3] ]
>>>sort(array)
>>>array
>>>[ ['d', 1], ['e', 2], ['c', 3], ['b', 4], ['a', 5] ]


 reverse()方法

将列表中元素反转排序,比如下面这样

>>> x = [1,5,2,3,4]
>>> x.reverse()
>>> x
[4, 3, 2, 5, 1]


reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序整理。如果需要对列表中的参数进行整理,就需要用到列表的另一种排序方式sort正序排序。
sort()排序方法

此函数方法对列表内容进行正向排序,排序后的新列表会覆盖原列表(id不变),也就是sort排序方法是直接修改原列表list排序方法。

>>> a = [5,7,6,3,4,1,2]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 7]



在玩蛇网许多python初学者,对sort()方法比较糊涂。有的时候会需要一个排序好的列表,而又想保存原有未排序列表,他们会这么操作:

>>> a = [5,7,6,3,4,1,2]
>>> b = a.sort()
>>> print b
None


这个时候问题出现了,变量b得到的是一个空值。那么想要得到排序好的列表,又想保留原列表怎么办呢?列表sorted()方法可以帮你实现。
sorted()方法

即可以保留原列表,又能得到已经排序好的列表sorted()操作方法如下:

>>> a = [5,7,6,3,4,1,2]
>>> b = sorted(a)
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]



sorted()方法可以用在任何数据类型的序列中,返回的总是一个列表形式:

>>> sorted('iplaypython.com')
['.', 'a', 'c', 'h', 'i', 'l', 'm', 'n', 'o', 'o', 'p', 'p', 't', 'y', 'y']



本文讲解的是Python列表最基础的排序方法,列表还有更高级的排序方法,比如可以在方法内加入排序条件,这些会在列表高级排序方法文章中为大家介绍。


转载于:https://blog.51cto.com/codemaid/1897393