Python中的sort方法(竞赛必备)

1.sort的介绍

sort在python中的作用是给可迭代对象进行排序,对内容进行原地修改,无返回值。

sort有两个参数key与reverse,key为指定某种规则排序;reverse为True时降序排列,为False时升序排列,默认升序排列。

2.sort的基本使用

#定义一个待排序的列表
ls = [1,89,34,21,15,78]

#升序排列
ls.sort(reverse=False)   #等价于  ls.sort()
print(ls)                #输出:[1, 15, 21, 34, 78, 89]

#降序排列
ls.sort(reverse=True)
print(ls)                #输出:[89, 78, 34, 21, 15, 1]

3.sort的高级使用

#定义一个待排序的字典
d = {5:"hello",8:"world",1:"hi",3:"how"}

#将字典进行排序首先要转化成列表类型
d_list = list(d.items())    #若写成 d_list = list(d) ,列表只会存放字典中键的内容

#按照键进行降序排列  (升序只需要改变reverse的值或者是不加任何东西,就不过多赘述了)
d_list.sort(reverse=True)
print(dict(d_list))        #输出:{8: 'world', 5: 'hello', 3: 'how', 1: 'hi'}

#按照值进行升序排列
d_list.sort(key=lambda x:x[-1],reverse=False)
print(dict(d_list))        #输出:{5: 'hello', 1: 'hi', 3: 'how', 8: 'world'}

#按照值的长度降序排列
d_list.sort(key=lambda x:len(x[1]),reverse=True)
print(dict(d_list))        #输出:{5: 'hello', 8: 'world', 3: 'how', 1: 'hi'}

4.题目解答

1.1来源:https://www.luogu.com.cn/problem/P1781

1.2内容:

题目描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入格式

第一行为一个整数 n,代表竞选总统的人数。

接下来有 n 行,分别为第一个候选人到第 n 个候选人的票数。

输出格式

共两行,第一行是一个整数 m,为当上总统的人的号数。

第二行是当上总统的人的选票。

输入输出样例

输入 #1

5
98765
12365
87954
1022356
985678

输出 #1

4
1022356

说明/提示

票数可能会很大,可能会到 100 位数字。

1≤n≤20。

1.3代码:

#法一: (按照长度比较大小,长度相同按照原数进行比较)
#数据读入
n = int(input())
ls = []
for i in range(n):
    ls.extend(list(map(int,input().split()))) #万能输入模板list(map(int,input().split()))

#数据排序
ls2 = sorted(ls,key=lambda x:(len(str(x)),x)) #等价于:ls1 = ls.copy()  + ls.sort(key=lambda x:(len(str(x)),x))
                                              #sort()原地修改  sorted()有返回值

#标记最大值
max_1 = ls2[-1]

#查找最大值的下标
ans = 0
for i in range(n):
    if ls[i] == max_1:
        ans = i
print(ans+1)
print(max_1)

#法二: (直接进行比较大小)
#数据读入
n = int(input())
ls = []
for i in range(n):
    ls.extend(list(map(int,input().split())))
    
#数据排序
ls1 = ls.copy()
ls.sort()

#标记最大值
max1 = ls[-1]

#查找最大值的下标
ans = 0
for i in range(n):
    if ls1[i] == max1:
        ans = i
print(ans+1)
print(max1)

5.题目练习

https://www.lanqiao.cn/problems/2122/learning/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值