A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、排序:
字符串和列表,都使用sort函数,默认都为升序,若想为降序,使用reverse=True
####不改变列表的结构和内容,产生一个新的列表
a=[1,2,5,4]
sorted(a)

####改变列表的结构和内容
a.sort()
______________________________________________numpy_______________________________________
numpy数组的排序:(sort、argsort、lexsort、numpy.searchsorted、numpy.partition、)
默认都为升序,若需要降序,加上ascending=True
####不改变原数组结构内容,生成一个新的数组
a=np.array([[1,3,2,4],[5,8,7,6]])
numpy.sort(a, axis=1, kind='quicksort', order=None)
a:所需排序的数组
axis:数组排序时的基准,axis=0,按行排序;axis=1,按列排序
kind:数组排序时使用的方法,其中:
kind=′quicksort′  为快排;kind=′mergesort′为混排;kind=′heapsort′为堆排;
order:一个字符串或列表,可以设置按照某个属性进行排序

####改变数组的结构内容
a.sort(axis=0)

####按照指定的列进行排序
#第三列进行排序,注意:argsort返回的只是排好序后的行索引,不会改变原数组
a=a[a[:,2].argsort()]

#####numpy.lexsort:
a:所需排序的数组
axis:数组排序时的基准,axis=0,按行排列;axis=1,按列排列
kind :数组排序时使用的方法,其中:
   kind='quicksort'为快排;kind= ′ mergesort ′为混排;kind='heapsort'为堆排;
order :一个字符串或列表,可以设置按照某个属性进行排序
>>> a=[1,5,1,4,3,4,4]
>>> b=[9,4,0,4,0,2,1]
>>> np.lexsort((b,a))
# b在前,a在后,即是先按照a的元素进行比较
# 如a中的最小值为两个1,其索引分别为0,2,再计较b中相应索引上的值,即9,0
# 对应的最小应是:1,0,而其对应的索引为2,所以排序后返回的结果第一个值为索引2
# 下一个最小应是:1,9,而其对应的索引为0,所以排序后返回的结果第一个值为索引0
# 以此类推...
array([2, 0, 4, 6, 5, 3, 1], dtype=int64)
>>> np.lexsort((a,b))
# a在前,b在后,即是先按照b的元素进行比较
# 如b中的最小值为两个0,其索引分别为0,4,再计较a中相应索引上的值,即1,3
# 对应的最小应是:0,1,而其对应的索引为2,所以排序后返回的结果第一个值为索引2
# 下一个最小应是:0,3,而其对应的索引为4,所以排序后返回的结果第一个值为索引4
# 以此类推...
array([2, 4, 6, 5, 3, 1, 0], dtype=int64)
>>> c=[[1,5,1,4,3,4,4],[9,4,0,4,0,2,1]]
>>> c
[[1, 5, 1, 4, 3, 4, 4], [9, 4, 0, 4, 0, 2, 1]]
>>> np.lexsort(c)
# 此种情况与先b后a的情况一致
array([2, 4, 6, 5, 3, 1, 0], dtype=int64)

#######numpy.searchsorted
a:所需排序的数组
v:待查询索引的元素值
side :查询索引时的方向,其中:
       kind= ′ left ′为从左至右;kind= ′ right ′ 为从右至左
sorder :一个字符串或列表,可以设置按照某个属性进行排序

>>> list3=[1,2,3,4,5]
>>> np.searchsorted(list3,2)
1
# 如若要在list3中插入元素2,则应当将其插在原列表索引为1的地方,即是插在元素1的后面
>>> np.searchsorted(list3,[-5,7,4,9])
array([0, 5, 3, 5], dtype=int64)
# 如若要在list3中插入元素-5,则应当将其插在原列表索引为0的地方,即是插在元素1的前面
# 其他以此类推...

其中list3必须为顺序,当为乱序的时候,必须先排序:
np.searchsorted(list3, 4, sorder = numpy.argsort(list3))

#######numpy.partition
>>>list=[3,4,5,2,1]
>>>np.partition(list,3)
array([2, 1, 3, 4, 5])
# 以排序后的第3个数,即3进行分区,分区后的结果即是:
# 小于3的元素2,1位于3的前面,大于等于3的元素4,5位于3的后面

#####numpy.argpartition
返回数组的分区副本。
创建数组的副本,其元素重新排列,使得第k个位置的元素值位于排序数组中的位置。小于第k个元素的所有元素都在此元素之前移动,并且所有元素都等于或大于它。两个分区中元素的排序是未定义的。
---------------------
作者:wx_411180165
来源:CSDN
原文:https://blog.csdn.net/qq_24726509/article/details/83451047
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

正序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马