跳到主要内容

Python 语法速查:列表、字典、切片、推导式与 f-string 按场景查

把日常真在撸的 Python 常用语法理成一份按场景查的速查清单,列表字典切片推导式 f-string 与常用内置函数全收,顺带标出新手最容易踩的几个坑。

发布于 作者 李雷
#Python #速查 #编程入门 #代码片段

Python 语法速查:按场景查的常用写法与易错点

写 Python 久了会发现,真正卡住人的不是高深特性,而是一些天天用却记不太牢的小语法。切片该写 [1:5] 还是 [1:5:2],字典取值用 [] 还是 .get,推导式里的过滤条件放哪。这篇把这些高频写法按场景理一遍,方便你撸代码撸到一半直接对照着抄。

列表:切片和推导式是两件利器

列表最该吃透的是切片和推导式。切片语法是 序列[起:止:步长],止点取不到。nums[1:4] 取下标 1 到 3,nums[::2] 隔一个取一个,nums[::-1] 直接把列表倒过来,比 reversed() 还省事。

推导式是 Python 最地道的写法,一行顶一个循环。比如把每个数翻倍:

nums = [1, 2, 3, 4]
doubled = [x * 2 for x in nums]          # [2, 4, 6, 8]
evens = [x for x in nums if x % 2 == 0]  # [2, 4],带过滤

过滤条件 if 放在 for 后面,如果还要三元表达式就放到 for 前面:[x if x > 0 else 0 for x in nums]。这两个位置别记混。

字典:.get 和推导式少写一堆判断

字典取值,键不一定存在时别用 d[k],会抛 KeyError。用 .get(k, 默认值) 一行解决:

counts = {"a": 1}
counts.get("b", 0)          # 0,不会报错
counts.setdefault("c", []).append(1)  # 键不存在就建空列表再追加

字典也能写推导式,常用来做键值翻转或筛选:{v: k for k, v in d.items()}。统计词频则直接上 collections.Counter,比手写循环干净得多。

字符串:f-string 一个就够

格式化字符串只记 f-string 就行,旧的 %.format() 可以淘汰了。变量直接塞进大括号,还能写格式说明符:

name, score = "李雷", 92.5
f"{name} 考了 {score:.1f} 分"   # 李雷 考了 92.5 分
f"{score:>8}"                   # 右对齐占 8 格
f"{1234567:,}"                  # 1,234,567 千分位

Python 3.8 起还有调试神器 f"{score=}",直接打印出 score=92.5,排查变量值不用再手写一遍名字。

常用内置函数:能不写循环就不写

很多循环其实有现成内置函数顶替,可读性更高:

  • enumerate(xs):同时拿下标和值,别再写 for i in range(len(xs))
  • zip(a, b):把两个序列并起来一起遍历,Python 3.10+ 可加 strict=True 防止长度不齐被悄悄截断。
  • sorted(xs, key=len):带 key 排序,稳定且不改原列表。
  • sum / min / max / any / all:配合生成器表达式,sum(x * x for x in nums) 常量内存算总和。

新手最容易踩的几个坑

我自己刚上手时,最坑的一次是给函数写了可变默认参数 def add(x, lst=[]),结果多次调用之间 lst 居然共享同一个列表,数据越攒越多。正确写法是默认值给 None,函数体里再判空新建。这类坑还有几个值得记牢:

  • 整数除法向下取整:-7 // 2-4 不是 -3
  • is 判断身份,== 判断相等,比较值永远用 ==,只有判 None 才用 is None
  • 边遍历边删列表会出乱子,要删就遍历副本 for x in xs[:] 或新建结果列表。

这些坑光看一遍记不住,建议把速查页的"常见坑"一章收藏,每写一个新函数回头扫一眼。完整的 100+ 段代码片段和按分类筛选都在 Python 速查表,搜索框跨标题、代码、说明、变式一起过滤,输「推导」所有列表字典集合推导一次性出来。

处理文本时正则也是高频搭子,想配套查可以看 正则速查表,和这份 Python 速查一起覆盖日常切分、替换、提取的活儿。


Made by Toolora · Updated 2026-06-13