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代码如何写的更优雅,各位一定也有自己的小妙招。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏2同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值