1.7.1蓝桥杯——自定义排序

本文阐述了如何使用Python的sorted()和list.sort()对列表进行排序,包括默认排序和自定义比较函数应用。
摘要由CSDN通过智能技术生成

一、sorted(iterable)排序,有返回值

1、默认升序 

2、自定义规则

自定义规则:
1、写一个比较函数cmp
2、套人functools模块中的cmp to key

自定义规则:当a<b返回负数、当a>b返回正数、二者相等返回0

自定义规则:当a排在前面返回负数、当b排在前面返回正数、两者相等返回0

例题一:

#按照绝对值从小到大
from functools import cmp_to_key
def cmp(a,b):
    if abs(a)<abs(b):
        return -1
    elif abs(a)>abs(b):
        return 1
    else:
        return 0
a=[-2,1,-3,-5,4]
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('按绝对值从大到小',sorted_a)

例题二:

from functools import cmp_to_key
#按二元组和小的排在前面,和相等的按第一位和小的排在前
def cmp(a,b):
    if sum(a)>sum(b):
        return 1
    elif sum(a)<sum(b):
        return -1
    else:
        if a[0]>b[0]:
            return 1
        elif a[0]<b[0]:
            return -1
        else:
            return 0
a=[(2,3),(5,-2),(4,5),(5,0),(4,1)]
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('自定义排序从大到小',sorted_a)

例题三:

from functools import cmp_to_key
# 按照长度排,若长度相同,则按照字符顺序排序
def cmp(a,b):
    if len(a)>len(b):
        return 1
    elif len(a)<len(b):
        return -1
    else:
        if a>=b:
            return 1
        else:
            return -1
a=['Python','Swift','Java','C++','Go','Rust']
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('自定义排序从大到小',sorted_a)

 二、list.sort(),没有返回值

1、直接在原来列表上排序

a=[1,3,2,5,4]
sorted_a=sorted(a)
print("a=",a)
print("sorted_a=",sorted_a)
sorted_a=a.sort()
print("a=",a)
print("sorted_a=",sorted_a)

 

 2、自定义规则,同上

from functools import cmp_to_key
def cmp(a,b):
    if abs(a)>abs(b):
        return 1
    elif abs(a)<abs(b):
        return -1
    else:
        return 0
a=[-2,1,-3,-5,4]
a.sort()
print('普通排序从大到小',a)
a.sort(key=cmp_to_key(cmp))
print('自定义排序从大到小',a)

总 

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值