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)