Python代码如何写的更优雅

481 阅读3分钟

Python代码如何写的更优雅

首先最重要的一点, 忘掉其他语言里的写法, 尝试使用Python风格进行code, 熟练之后,你会觉得她真的很美!

1. 多个值进行初始化

# > yes
s1,s2,s3 = [],[],0 
# > no (这样写,既麻烦,看起来也累)
s1 = []
s2 = []
s3 = []

2. 三目运算符

# 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)

3. 列表生成式

# > 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)

4. list、str元素倒置

# 有的同学,肯定想自己封装一个,其实不用, 直接使用切片就可以了。
>>> s = '123'
>>> s[-1::-1]
'321'

>>> a = [1,2,3]
>>> a[-1::-1]
[3, 2, 1]

# ! 而且上面的这个式子,非常好记,两边写个-1,中间什么也不写。
# ! 又简单又方便,wonderful!beautiful!

5. 排序功能

# !非业务必须,不要自己写排序算法,写的慢,还容易错
>>> 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),可以说已经胜过了绝大多数排序算法了。

6. 格式化输出

# 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

7. 尾语

我知道的,关于Python代码如何写的更优雅,各位一定也有自己的小妙招。

欢迎您在评论区留言,我也好乘机学一手。