Python排序方法-列表排序sorted的用法:正数在前负数在后,整数从小到大,负数从大到小

Python排序方法-列表排序sorted的用法:正数在前负数在后,整数从小到大,负数从大到小

    • 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) 返回的结果进行排序

结果比较如下:
Python排序方法-列表排序sorted的用法:正数在前负数在后,整数从小到大,负数从大到小_第1张图片

解决列表排序:正数在前,负数在后
现有列表:list1=[7, -8, 5, 4, 0, -2, -5],目标是:正数在前负数在后,正数从小到大,负数从大到小

list1 = [7, -8, 5, 4, 0, -2, -5]
print(sorted(list1, key=lambda x: x*-10 if x <= 0 else 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 +10 if x <= 0 else 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 方法同样的结果。
结果如下
Python排序方法-列表排序sorted的用法:正数在前负数在后,整数从小到大,负数从大到小_第2张图片

你可能感兴趣的:(python,列表)