区分sort( )、sorted( )、argsort( )函数对元组、列表、字典或数组的应用
在讲排序函数之前,先简单区分一下这几种类型,自己一开始也会弄混了,尤其是出现套用,比如列表的字典、字典的列表等。有一个小技巧就是在python中debug的时候就会出现每个变量的类型,这时候就可以顺便检查我们设定变量的类型是否正确了。
元组tuple
例如:aa=(1,2,3)
元组的性质是只能读取不能改变,一般用来存放一组常量。也不能用append或pop某个元素了,也不能对其中的元素进行重新赋值,只能进行索引访问,如:aa[0],(就会输出1)。元组的优点就是能高效地访问某个常量。
列表list
列表能完成上述元组不能完成的事情,也就是列表可以对其中的元素进行赋值,也可以用append或pop增加或减少元素。pop中堆栈的原则是先进后出,后进先出。例子如下,且列表l中的元素为元组。
l = [(1,2),(3,4)]
l.append((5,6))
print(l)
>>>[(1, 2), (3, 4), (5, 6)]
l.pop()
>>>(5, 6)
l.pop()
>>> (3, 4)
print(l)
>>>[(1, 2)]
字典
是通过关键字来存储或索引,形式如下:
dict = {'abc':1, 'def':2, 'ghi':3}
print(dict['abc']) #这里就表示'abc'是1的索引。
>>> 1
#简单写一下dict的几个常用内置函数
del dict['abc'] #删除某个元素
print(dict)
>>> {'def': 2, 'ghi': 3}
dict.clear() #清空字典
print(dict)
>>> {}
#字典中是不能append的,添加元素可以用update
dict = {'abc':1, 'def':2, 'ghi':3}
dict.update(h=4)
print(dict)
>>> {'abc': 1, 'def': 2, 'ghi': 3, 'h': 4}
len(dict) #返回字典的长度
>>>4
数组
数组是numpy库中一种特有的形式,并不是python自带的,因此我们创建数组时,需要import numpy这个库。除了能创建数组np.array外,还有矩阵np.mat。
import numpy as np
n = np.array([1,2,3,4])
mat = np.mat([[1,2],[3,4],[5,6]])
print("array:", n)
print( "matrix:", mat)
>>>array: [1 2 3 4]
>>>matrix: [[1 2]
[3 4]
[5 6]]
数组和矩阵的性质有很多,这里就不一一细讲。
顺便讲一下数组与列表之间的互换方式。
import numpy as np
n = np.array([1,2,3,4])
List = n.tolist() #数组转化为列表
print("list:",List)
>>>list: [1, 2, 3, 4]
N = np.array(List) #列表转化为数组,与创建数组的形式一致
print("array:", N)
>>>array: [1 2 3 4]
sort( )函数
好的,来写排序函数了。sort( )函数是python中的内置排序函数,对列表进行原址排序(因此是不能用于元组的,元组是只读模式),也就是应用于列表list时,会改变了list,在实际操作会带来不便。毕竟你可能还需要排序之前的样本,因此这时候就用sorted( )。例如:
list = [15, 6, 89, 10, 33]
list.sort()
list
>>>[6, 10, 15, 33, 89]
sorted( )函数
python中内置的sorted不止对于list格式有效,对于所有迭代序列都有效。再排序倒序时设置reverse(True为降序,False为升序,默认值为False)。
list1 = [15, 6, 89, 10, 33]
list2 = sorted(list1)
list1
>>>[15, 6, 89, 10, 33]
list2
>>>[6, 10, 15, 33, 89]
list3 = sorted(list1, reverse=True)
list3
>>>[89, 33, 15, 10, 6]
argsort( )
这是numpy中自带的,因而用于数组形式,返回的是数组元素排序的索引值。
n1 = np.array([33, 82, 10, 56])
n1_index = np.argsort(n1) #这里排序之后就是10,33,56,82,注意python是从0开始计数
n1_index
>>>array([2, 0, 3, 1], dtype=int64)
n1_negative_index = np.argsort(-n1) #返回倒序排序的索引值,直接加上'-'号
n1_negative_index
>>>array([1, 3, 0, 2], dtype=int64)
n2 = np.array([[10,3,41],[5,17,8],[19,74,2]])
n2_index_col = np.argsort(n2, axis=0) #设置axis=0返回按列排序后的index
n2_index_col
>>>array([[1, 0, 2],
[0, 1, 1],
[2, 2, 0]], dtype=int64)
n2_index_row = np.argsort(n2, axis=1) #设置axis=1返回按行排序后的index
n2_index_row
>>>array([[1, 0, 2],
[0, 2, 1],
[2, 0, 1]], dtype=int64)
最近在看Kd树里面有个排序用到argsort,也顺便粗略的总结了一下排序的用法,希望能多多交流哟~有错误的地方请留言指正哦。)