前言:今年4月第一次参加蓝桥杯比赛,选择的Python 研究生组赛道。在备赛过程中,发现经常会用到一些编程小技巧,因此笔者整理了一些蓝桥杯Python组编程基础常用的内容,以便日后备用。如果有小伙伴也觉得实用,赶快点赞收藏一下~!(持续更新)
本文目录
- 一、输入
- 二、输出
- 三、声明创建列表
- 四、简单排序
- 4.1 列表函数sort()
- 4.2 内置函数sorted()
- 4.3 sort()与sorted()区别
- 4.4 自定义比较函数 多列排序
一、输入
单个数输入,一般不用eval函数,速度会比较慢。
# 整型输入
n = int(input())
# 浮点输入
k = float(input())
# 输入三个数,例如:1 2 3,除非有特殊字符截取,否则最好split()函数参数为空。
a,b,c = map(int,input().split())
# 输入一串数字,例如:1 2 3 4 5,得到列表[1,2,3,4,5]
s = list(map(int,input().split()))
二、输出
输出使用格式化符号比较习惯。
# 隔空输出
a = [1,2,3,4]
print(' '.join(map(str,a))) #1 2 3 4
# 四舍五入
a = 3.1415926
print(int(a + 0.5))
# 保留两位,仅截取两位小数,并不会四舍五入
a = 3.1415926
print("%.2f"%a)
# 保留两位+四舍五入。保留几位就在后一位上+5
print('%.2f'%(a+0.005)))
# 不足几位,前导/补0,'%03d'中间数字对应几位
print('%03d'%2) # '002'
三、声明创建列表
# 1.创建全0列表,长度为n的一维0列表
a = [0 for _ in range(n)]
# 或者
a = [0]*n
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 2.创建二维空列表
a = [[] for _ in range(n)]
# [[], [], [], [], [], [], [], [], [], []]
# 3.创建二维全0列表,m行n列的0二维数组
a = [[0 for _ in range(n)] for _ in range(m)]
# 或者
a = [[0] * n for _ in range(m)]
# 注意:不能使用[[0]*n]*m,此语句m行将指向同一对象[0]*n,即引用的同一对象,改变一行其它行都会跟着变。
四、简单排序
4.1 列表函数sort()
list.sort(key=None,reverse=False),对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
参数:
- key – 用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
注意:因为python中无法修改字符串元素,所以对字符串无法使用sort函数,必须先把字符串转换转换成列表list(str)。
list=[30,40,10,50,50.1,80,60,100,90]
list.sort() # 升序
# [10, 30, 40, 50, 50.1, 60, 80, 90, 100]
list.sort(reverse=True) # 降序
# [100, 90, 80, 60, 50.1, 50, 40, 30, 10]
aList = ['Google', 'Runoob', 'Taobao', 'Facebook']
aList.sort()
# ['Facebook', 'Google', 'Runoob', 'Taobao']
vowels = ['e', 'a', 'u', 'o', 'i']
# 降序
vowels.sort(reverse=True)
# ['u', 'o', 'i', 'e', 'a']
4.2 内置函数sorted()
sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。即对字符串也可以,因为sorted返回的是新对象。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted(iterable, key=None, reverse=False),返回重新排序的新列表。
参数:
- iterable – 可迭代对象。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sorted([5,2,3,1,4]) # 默认升序
# [1,2,3,4,5]
# sorted 的应用,也可以通过 key 的值来进行数组/字典的排序,比如:
# 获取列表中字典中key-age的值
def takeSecond(elem):
return elem['age']
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array,key=takeSecond)
# [{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]
4.3 sort()与sorted()区别
- sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作;
- sort是在原列表上排序,而sorted产生一个新的列表,不改变原列表;
- 部分排序。sort()不能在一部分上做排序,只能整体排序。sorted()可以部分排序,但是不能在原数据上排序。
4.4 自定义比较函数 多列排序
- 自定义比较函数sort(key=f_sort)
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
# 自定义比较函数
def f_sort(elem): # 具体的函数的参数就是取自于可迭代对象中,即列表元素
return (b[elem],elem) # 返回用来比较的元素,若b[elem]相同,则比较elem,依次类推
例题1:
'''
题解:模拟排序题。
1.自定义比较函数sort(key=f_sort)
'''
# 输入
n = int(input())
m = int(input())
# 原数组
a = [i for i in range(1,n+1)]
# 数位和数组
b = [0]*(n+1)
for i in range(1,n+1):
# 求i的数位之和
num = i
while num != 0:
b[i] += num%10
num //= 10
# 自定义比较函数
def f_sort(elem): # 具体的函数的参数就是取自于可迭代对象中,即列表元素
return (b[elem],elem) # 返回用来比较的元素,若b[elem]相同,则比较elem,依次类推
# 排序
# a.sort(key=lambda x:(b[x],x))
a.sort(key=f_sort)
print(a)
print(a[m-1])
例题2:
'''
题解:模拟排序题。
1.自定义比较函数sort(key=f_sort)
2.多列排序,按总分高到低降序排列,总分相同的按语文成绩高到低降序排列,总分和语文都相同,按学号小升序排列。
例如:先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
'''
# 输入
n = int(input())
# 构建排序原数组
a = []
for i in range(1,n+1):
c,m,e = map(int,input().split())
grade = c + m + e
a.append((grade,c,i))
# print(a)
# 自定义比较函数
def f_sort(elem):
return (-elem[0],-elem[1],elem[2])
# 排序,默认升序
a.sort(key=f_sort)
# 输出前五名
for tup in a[:5]:
print(f'{tup[2]} {tup[0]}')
欢迎点赞评论,指出不足,笔者由衷感谢!~