前言
如果你习惯了 C++ 或者 Java 语法,初次尝试用 Python 刷算法题,建议阅读本指南。这不是基础语法教程,而是针对算法竞赛的实战手册,汇集了常用库、语法糖及 C++/Java 选手容易踩的坑。
一、输入输出与环境配置 (I/O & Setup)
在 LeetCode 核心代码模式下无需关心 I/O,但在 ACM 模式(如各大厂笔试、牛客、Codeforces)中,Python 的 I/O 速度是瓶颈。
1. 极速输入输出
当数据量较大时,input() 和 print() 可能会导致 TLE (Time Limit Exceeded)。
import sys # 替代 input()
input = sys.stdin.readline
# 使用方式
n = int(input())
arr = list(map(int, input().split()))
# 替代 print(),注意 write 需要传入字符串且手动加换行
sys.stdout.write(str(ans) + '\n')
2. 解除递归深度限制
Python 默认递归深度通常是 1000,做 DFS 或深搜时容易报错 RecursionError。
import sys
sys.setrecursionlimit(10**6) # 设置为 100 万,足够应对大多数题目
二、核心数据结构与黑魔法 (Data Structures)
1. 数组 (List)
Python 的 List 是动态数组,对应 C++ vector / Java ArrayList。
初始化二维数组 (避坑):
# ❌ 错误:所有行都指向同一个对象
grid = [[0] * m] * n
# ✅ 正确
grid = [[0] * m for _ in range(n)]
切片 (Slicing):
arr = [0, 1, 2, 3, 4, ]
(arr[::-])
(arr[:])

