Python遍历数组最优实现方案:两种常用写法对比及优选咨询
现有两种写法的优劣
- 手动维护
count计数器的第一种实现不推荐使用:这种写法需要你自己保证计数器的更新和循环步骤完全同步,一旦后续修改循环逻辑(比如新增continue跳过某轮循环、或者提前break终止循环),很容易出现计数器和遍历位置错位的bug,可维护性非常差。 - 用
range(len(names))的第二种实现相对更稳妥,不会出现手动维护计数器的错位问题,但并不是Python中最优的写法。
更推荐的实现方案
Python原生提供了更符合语言特性、可读性更高的并行遍历方案,不需要手动维护索引,也不需要调用range和len函数:
1. 多序列并行遍历用zip()
针对你需要同时遍历names和scores两个同长列表的场景,直接用zip()打包两个列表,直接取出对应位置的元素即可,代码最简洁:
names = ["Phil", "Quentin", "Rachel", "Simone"] scores = [45, 27, 83, 63] for person, score in zip(names, scores): print(f"{person} scored {score}")
配合f-string做字符串拼接,比手动拼接字符串+转类型的写法更易读。
如果两个列表长度不一致,zip()会自动截断到较短列表的长度,要是你需要补全超长部分,可以使用itertools.zip_longest处理。
2. 需要索引时用enumerate()
如果你确实需要拿到当前遍历的索引值(比如要修改原列表的对应位置元素),可以用enumerate()替代range(len())的写法,同时拿到索引和元素值,可读性更高:
for idx, person in enumerate(names): print(f"{person} scored {scores[idx]}")
关于写法选择
这类基础遍历的写法并不完全是个人偏好问题,Python社区有明确的风格导向:优先选择内置的、出错概率低、可读性高的语法实现,除非你有特殊的性能要求(这类基础遍历场景几乎不存在性能差异),否则不推荐使用手动维护计数器、range(len())这类其他语言平移过来的写法。
内容的提问来源于stack exchange,提问作者Gregthepotato
相关产品推荐
相关产品推荐

