别再写 for 循环了!列表推导式yyds
一行代码干掉五行业务逻辑。处理数据时,我以前也爱写 for + append,直到被同事嘲笑了。
# 老土写法
squares = []
for x in range(10):
if x % 2 == 0:
squares.append(x**2)
# 高手写法
squares = [x**2for x in range(10) if x % 2 == 0]
简洁、高效、还省电(bushi)。
enumerate():别再手动数索引了
遍历列表还要自己维护计数器?太原始了!enumerate 直接给你打包好 (index, value)。
fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
# 输出: 1. apple, 2. banana...
从此告别 i = 0; i += 1 的时代。
zip():数据对齐神器
合并两个列表?别再用下标硬怼了。zip 让你优雅地并行迭代。
names = ['Alice', 'Bob']
ages = [25, 30]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
# 输出: Alice is 25..., Bob is 30...
当列表长度不一时,它会自动停在最短的那个,超贴心。
字典的 setdefault(),比 get() 更香
给字典里不存在的key赋默认值? 别再写 if key not in dict 了。
# 烂大街写法
if'count'notin data:
data['count'] = 0
data['count'] += 1
# 优雅写法
data.setdefault('count', 0)
data['count'] += 1
一行搞定初始化,代码清爽多了。
collections.defaultdict:字典界的“暖男”
比 setdefault 还猛!直接在创建时指定默认工厂函数。
from collections import defaultdict
word_count = defaultdict(int) # 不存在的key,默认是0
word_count['python'] += 1# 不会报错!
处理分组、计数类任务,效率直接拉满。
f-string:格式化字符串的终极答案
还在用 % 或者 .format()? 2026年了,该升级了!
name, score = "张三", 95
# 老古董
print("{} scored {} points".format(name, score))
# 新潮流
print(f"{name} scored {score} points")
# 甚至能直接计算
print(f"Next year he'll be {score + 5}!")
快、直观、还能塞表达式,真香!
海象运算符 :=,少写一行是一行
Python 3.8+ 的宝藏!在表达式内部为变量赋值。
# 传统写法,n要写两遍
n = len(data)
if n > 10:
print(f"List is too long ({n} elements)")
# 海象写法,一次搞定
if (n := len(data)) > 10:
print(f"List is too long ({n} elements)")
尤其在 while 循环里读取文件时,简直绝了。
with 语句:资源管理的金标准
打开文件后忘记关?with 语句帮你自动善后。
# 危险操作
f = open('file.txt')
data = f.read()
# 忘记 f.close() 就完了
# 安全操作
with open('file.txt') as f:
data = f.read()
# 出了with块,文件自动关闭!
任何需要“获取-释放”资源的操作,都该用它。
pathlib:告别 os.path 的混乱
路径拼接还在用 os.path.join?pathlib 是面向对象的路径操作。
from pathlib import Path
p = Path('data') / 'input.txt'
if p.exists():
content = p.read_text()
代码更易读,跨平台兼容性也更好,微软看了都流泪。
生成器:处理大数据不崩的秘诀
一次性加载百万行数据?内存直接爆炸!生成器按需生产数据。
# 列表推导式:吃光你的内存
huge_list = [x**2for x in range(1000000)]
# 生成器表达式:内存占用几乎为零
huge_gen = (x**2for x in range(1000000))
for item in huge_gen: # 用一个算一个
process(item)
大数据处理、管道操作,没它真不行。