主要内容:排序,搜索
python列表排序
a = [1,2,3,4,5]
# 排序
a.sort() # 默认升序排序,无返回值,直接修改列表元素顺序
a.sort(reverse=True) # 按照升序排序
sorted(a) # 内建函数排序,有返回值,创建新的列表对象
numpy列表排序
numpy提供多种排序函数,如下:
import numpy as np
a = np.array([1, 4, 3, 2], [2, 1, 3, 4])
# ndarray.sort(),无返回值
a.sort() # None
# np.sort(a,axis=1,kind="quicksort",order=None),有返回值
"""
Parameters
-----------------------
:param a:需要排序的数组
:param axis:数组排序的基准
axis=0:按行排序
axis=1:按列排序
:param kind:数组排序时使用的方法
quicksort:快排
mergesort:混排
heapsort:堆排
:param order:字符串或者列表,设置按照某个属性进行排序
:return:a sorted copy of an array
"""
# 参数axis
np.sort(a, axis=0) # 按行排序 [[1,2,3,4],[1,2,3,4]]
# 参数order
dtype = [('Name', 'S10'), ('Height', float), ('Age', int)]
values = [('Li', 1.8, 41), ('Wang', 1.9, 38), ('Duan', 1.7, 38)]
b = np.array(values, dtype=dtype)
# 按照属性Height进行排序,此时参数为字符串
np.sort(b, order='Height') # [('Duan', 1.7, 38), ('Li', 1.8, 41),('Wang', 1.9, 38)]
# 先按照属性Age排序,如果Age相等,再按照Height排序,此时参数为列表
np.sort(b, order=['Age', 'Height']) # [('Duan', 1.7, 38), ('Wang', 1.9, 38),('Li', 1.8, 41)]
# np.argsort(a,axis=1,kind="quicksort",order=None)
"""
parameters和np.sort()类似
---------------------------
:return:返回数组排序后的下标
"""
c1 = np.array([4, 2, 5, 7, 3])
# 返回元素排序后的下标
np.argsort(c) # [1, 4, 0, 2, 3]
c2 = np.array([[3, 5], [5, 7]])
np.argsort(c2, axis=0) # [[0,1],[0,1]]
# np.lexsort(a,axis=-1,kind="quicksort",order=None)
c2 = np.array([[6, 5], [9, 7]])
c3 = np.array([3, 3, 5, 2, 4])
np.lexsort((c3, c)) # [1 4 2 0 3]#先按照c的元素进行排序,若c元素相等,再比较c3对应的元素,返回数组的下标
搜索
# argmax函数返回数组中最大值对应的下标
a = np.arange(10).reshape(3,4)
np.argmax(a) # 9
np.nanargmax(a) # 忽略空值Nan,返回最大值对应的下标 9
#从数组中抽出元素
np.argwhere(a < 4) # 搜索指定值 [[0 0][0 1][0 2][0 3][0 4]]
np.extract((a % 2) == 0, a) # [0 2 4 6 8]