当前位置:首页>python>介绍几个实用的Python代码“高级简化写法”

介绍几个实用的Python代码“高级简化写法”

  • 2026-10-11 07:39:56
介绍几个实用的Python代码“高级简化写法”
关注+星标,每天学习Python新技能

来源:网络

1

列表推导式

场景:根据一个列表,生成另一个新列表。

传统写法:

old_list = [1, 2, 3, 4, 5]new_list = []for i in old_list:    if i % 2 == 0:        new_list.append(i ** 2)print(new_list)  # 结果: [4, 16]

高级写法(列表推导式):

old_list = [1, 2, 3, 4, 5]new_list = [i ** 2 for i in old_list if i % 2 == 0]print(new_list)

解析:把 for 循环和 if 判断压缩到一行。阅读顺序是从中间向外看。

2

字典推导式

场景:快速翻转字典的 Key 和 Value,或者批量处理字典的值。

传统写法:

old_dict = {'a':1,'b':2,'c':3}new_dict = {}for k,v in old_dict.items():    new_dict[v] = kprint(new_dict) # 结果:{1: 'a', 2: 'b', 3: 'c'}

高级写法:

old_dict = {'a': 1, 'b': 2, 'c': 3}new_dict = {v: k for k, v in old_dict.items()}print(new_dict)

3

三元运算符

场景:根据条件给变量赋不同的值,用一行代替 if-else。

传统写法:

score = 85if score >= 60:    result = "及格"else:    result = "不及格"print(result)

高级写法:

score = 85result = "及格" if score >= 60else"不及格"print(result)

解析:语法是 结果A if 条件 else 结果B。条件为真返回A,否则返回B。比较常用。

4

链式比较

场景:判断一个值是否在某个区间内。

传统写法:

age = 25if age >= 18 and age <= 60:    print("成年人")

高级写法:

age = 25if 18 <= age <= 60:    print("成年人")

解析:Python 允许像数学公式一样把比较符连起来,不仅好看,而且效率更高。

5

解包赋值

场景:交换变量值,或者快速提取列表/元组中的元素。

传统写法:

# a b 交换值a = 1b = 2temp = aa = bb = temp# 提取坐标point = [111.9, 31.9]lon = point[0]lat = point[1]

高级写法:

# 交换变量a = 1b = 2a, b = b, a# 提取坐标point = [111.9, 31.9]lon, lat = point

解析:右侧的序列会自动按位置拆包,一一对应赋值给左侧的变量。

6

字典的.get()方法

场景:从字典取值,但如果 Key 不存在会报 KeyError,通常需要先判断。

传统写法:

data = {'name': 'Bob', 'age': 25}if 'gender' in data:    gender = data['gender']else:    gender = '未知'

高级写法:

data = {'name': 'Bob', 'age': 25}gender = data.get('gender', '未知')

解析:dict.get(key, default),如果 key 存在返回其值,不存在则返回 default,不设置 default 就返回None,完美避免报错。

7

f-string 格式化(Python 3.6+)

场景:把变量嵌入到字符串中。

传统写法:

data = {'name': 'Bob', 'age': 25}info = '姓名:' + data['name'] +',年龄:' + str(data['age'])print(info)# % 格式化info = '姓名:%s,年龄:%d' % (data['name'], data['age'])print(info)

高级写法:

data = {'name': 'Bob', 'age': 25}info = f'姓名:{data["name"]},年龄:{data["age"]}'print(info)

解析:只需在字符串前加个 f,就可以在 {} 里直接写 Python 变量甚至表达式(如 {age + 1})。

8

Any / All 函数

场景:判断一个列表里是否“存在”满足条件的元素,或者是否“所有”元素都满足条件。

传统写法:

nums = [2, 4, 6, 8]# 判断是否全为偶数all_even = Truefor n in nums:    if n % 2 != 0:        all_even = False        break

高级写法:

nums = [2, 4, 6, 8]all_even = all(n % 2 == 0for n in nums)  # 全为偶数?是否全部为Truehas_odd = any(n % 2 != 0for n in nums)  # 有奇数?是否有一个为True

解析:结合生成器表达式,不仅代码短,而且 all 和 any 具有短路特性(只要发现一个 False/True 就立刻停止遍历),非常高效。

9

numpy 中用布尔索引过滤数据

场景:当用一个布尔数组作为索引去切片另一个数组时,NumPy 会只保留布尔数组中为 True 的对应位置的元素,把为 False 的元素扔掉。

传统写法:

import numpy as np# 监测点的经纬度lons = np.array([111.5, 110.0, 111.8, 112.5])lats = np.array([31.5, 31.2, 35.0, 31.8])# 监测值:如风度、湿度等values = np.array([10, 20, 30, 40])# 假设监测范围如下lon_min = 111lon_max = 112lat_min = 31lat_max = 32# 筛选出满足经纬度条件的new_lons = []new_lats = []new_values = []for i inrange(len(lons)):    if (lons[i] >= lon_min) and (lons[i]<=lon_max) and (lats[i] >= lat_min) and(lats[i]<=lat_max):        new_lons.append(lons[i])        new_lats.append(lats[i])        new_values.append(values[i])

高级写法:

# 将上面那段循环和判断替换成以下代码mask = (lons >= lon_min) & (lons <= lon_max) & (lats >= lat_min) & (lats <= lat_max)new_lons = lons[mask]new_lats = lats[mask]new_values = values[mask]

解析:

  1. mask 是什么?

  • lons 和 lats 是 NumPy 数组。当它们和标量(比如 lon_min)进行 >= 比较时,结果是一个与原数组形状相同的布尔(Boolean)数组,里面只有 True 或 False。

  • mask 只是一个由 True 和 False 组成的数组,它记录了哪些索引位置上的站点是符合条件的。

  1. mask 怎么过滤数据?

  • 当用一个布尔数组作为索引去切片另一个数组时,NumPy 会只保留布尔数组中为 True 的对应位置的元素,把为 False 的元素扔掉。

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

推荐阅读

Python 环境部署:pip vs conda 全对比,别再踩坑了

Python逆天改命!开源Hermes首次击败OpenAI Codex

Pycharm那些隐藏的实用小技巧,yyds!

Python 实现循环的最快方式(for、while 等速度对比)

点击 阅读原文 了解更多

最新文章

随机文章