首先最重要的一点,
忘掉其他语言里的写法,
尝试使用Python风格进行code,
熟练之后,你会觉得她真的很美!
# > yes
s1,s2,s3 = [],[],0
# > no (这样写,既麻烦,看起来也累)
s1 = []
s2 = []
s3 = []
# Python中没有 ? : 表达式,使用if else替代
def func():
return return_value if True else other_value
def fib(n):
return n if n<2 else fib(n-1)+fib(n-2)
# > yes
[i for i in range(1,100)]
# > 进一步过滤
# is_prime() ---> Bool , 如果返回值为True就加入列表
[i for i in range(2, n+1) if isPrime(i)]
# > no
res = []
for i in range(1,100):
res.append(i)
# 有的同学,肯定想自己封装一个,其实不用, 直接使用切片就可以了。
>>> s = '123'
>>> s[-1::-1]
'321'
>>> a = [1,2,3]
>>> a[-1::-1]
[3, 2, 1]
# ! 而且上面的这个式子,非常好记,两边写个-1,中间什么也不写。
# ! 又简单又方便,wonderful!beautiful!
# !非业务必须,不要自己写排序算法,写的慢,还容易错
>>> a = [10,12,11]
>>> sorted(a)
[10, 11, 12]
# > 我知道,我的读者看到这儿就不乐意了,心想你糊弄我们吧,就这,我们怎么实现需求。
# 别急,我们先来做一道题
题目:某班同学考试,进行分数排名,科目 语文+数学,按照总分降序排名。
若总分相同,则按语文成绩降序排名。若语文成绩还相同,则按学号升序排名。测试数据
N = 4
学号 语文数学
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
# 虽然我这边看似写了很长,但是实际,核心,排序处理的代码就一行。
# sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)
# 如果自己写,处理 {总分降序、语文成绩降序、学号升序} 嵌套的if估计头疼死个人。
n = int(input())
stus = []
for i in range(n):
l = list(map(int, input().split(" ")))
stus.append(l)
res = sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)
print(res)
'''
结果:
[[10000003, 85, 80],
[10000011, 85, 80],
[10000001, 64, 90],
[10000002, 90, 60]]
'''
# 肯定会有读者问,上面这么写,时间复杂度如何?
# sorted, 用的是timSort,平均时间复杂度 O(nlogn),可以说已经胜过了绝大多数排序算法了。
# python中的格式化输出方式可真是太多了。
# 我所知道的至少有5种。但其实真正常用且好用的就下面两种。
# 1. f-string 格式化输出
>>> h = "hello";w = "world"
>>> print(f"{h} {w}")
hello world
# 2. format输出
>>> h = "hello";w = "world"
>>> print("{} {}".format(h,w))
hello world
# 也可以写的花哨些
>>> h = "hello";w = "world"
>>> x = [h,w]
>>> print("{} {}".format(*x))
hello world
我知道的,关于Python代码如何写的更优雅,各位一定也有自己的小妙招。
欢迎您在评论区留言,我也好乘机学一手。