Python排序方法-列表排序sorted的用法:正数在前负数在后,整数从小到大,负数从大到小
sorted如何使用?
关于sorted的用法:sorted是python里的一个常用高阶函数,能够进行一些复杂的排序操作,例:假设存在列表 a = [“paparazzi”,“yang”,“maybe”,“redpanda”,“sylar”,“fy”,“ameame”],我想要根据字符串的长度对列表进行排序:
a =["paparazzi","yang","maybe","redpanda","sylar","fy","ameame"]print(sorted(a)) # 这个情况是默认按照字符串首字母的acsii 码进行排序
print(sorted(a, key=len))
# key 关键字接收的参数是一个函数
# 当我设置了 key=len 时,字符串排序的时候回先交给 len 这个函数去处理
# 然后根据 len(str) 返回的结果进行排序
结果比较如下:
解决列表排序:正数在前,负数在后
现有列表:list1=[7, -8, 5, 4, 0, -2, -5],目标是:正数在前负数在后,正数从小到大,负数从大到小
list1 =[7,-8,5,4,0,-2,-5]print(sorted(list1, key=lambda x: x*-10if x <=0else x))
# 这里的匿名函数意思是小于等于 0 的负数和 0 会乘 -10
# 大于 0 的正数就返回他们本身
# 0 乘 -10 后返回的就是它本身,后面会说明这么做的理由
此时得到的结果:
但是0既非正数也不是负数,我认为应该排列到正数和负数的中间(ps:别问,问就是处女座)
于是对在 x*-10 的后面增加了一个 +10 的操作, 代码如下:
list1 =[7,-8,5,4,0,-2,-5]print(sorted(list1, key=lambda x: x*-10+10if x <=0else x))
运行结果如下
OK目的达到
使用函数进行此类排序操作
其实一开始最先想到的办法并不是 sorted 和匿名函数,再介绍一种比较简单暴力的方法对这个列表进行排序吧
list1 =[7,-8,5,4,0,-2,-5]
# 正负分离 再重组
def zf_sort(list1):
list_z, list_f =[],[]for temp in list1:if temp >0:
list_z.append(temp)else:
list_f.append(temp)
list_z.sort()
list_f.sort(reverse=True)return list_z + list_f
print(zf_sort(list1))
这个方法的核心想法是,直接通过导入函数,将列表里面的数值以0为分界线,将数据分到两个列表中,再分别对数据进行排序,得到与 sorted 方法同样的结果。
结果如下
版权归原作者 wx-zhou 所有, 如有侵权,请联系我们删除。