【蓝桥杯】省赛无忧班(Python 组)第 2 期 8.1自定义排序

本文介绍了如何在Python中使用`sorted()`函数和`functools.cmp_to_key`来实现自定义比较函数,分别按绝对值、元组和自定义规则对列表进行排序。

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

sorted_a = sorted(a, reverse=True)
print("sorted_a (reverse) =", sorted_a)



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, 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, key=cmp_to_key(cmp))
# 打印排序后的结果
print("按照自定义排序:", sorted_a)



from functools import cmp_to_key
# 自定义比较函数
def cmp(a, b):
    # 当a的长度小于b的长度时返回负数
    if len(a) < len(b):
        return -1
        # 当a的长度大于b的长度时返回正数
    elif len(a) > len(b):
        return 1
        # 当a和b的长度相等时,按照字母顺序排序
    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)

# 定义一个列表,注意元素之间用逗号分隔
a = [1,3,2,5,4]
# 使用sorted函数对列表进行排序,并将结果赋值给一个新的变量
sorted_a = sorted(a)
# 打印原始列表和排序后的列表
print("a = ", a)
print("sorted a = ", sorted_a)
# 对原始列表进行就地排序(不返回新列表,而是修改原始列表)
a.sort()
# 打印排序后的原始列表
print("a = ", a)
print("sorted a = ", sorted_a)



from functools import cmp_to_key
# 自定义规则:当 |a| < |b| 返回负数,当 |a| > |b| 返回正数,二者相等返回 0
def cmp(a, b):
    # 按照绝对值从小到大
    if abs(a) < abs(b):
        return -1
    elif abs(a) > abs(b):
        return 1
    else:
        return 0
# 定义列表 a
a = [-2, 1, -3, -5, 4]
# 使用自定义的比较函数对列表进行排序
a.sort(key=cmp_to_key(cmp))
# 打印排序后的列表
print("按照绝对值从小到大:", a)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值