A013.遍历列表的三种常用方式
问题: Python 遍历列表的三种常用方式
👇 点击展开/折叠 面试背诵模板(建议先背这个)
三种方式代码对比
1 | fruits = ['apple', 'banana', 'cherry'] |
典型应用场景速查表
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 只读访问每个元素 | for item in list |
代码最简洁,无需处理索引 |
| 修改原列表中的元素 | for i in range(len(list)) |
通过索引赋值才能修改原对象 |
| 需要知道元素位置(如删除或插入) | enumerate(list) |
同时获取索引和值,逻辑清晰 |
| 反向遍历 | for item in reversed(list) 或 list[::-1] |
内置/切片处理,避免手算索引 |
| 边遍历边删除元素 | list[:] = [x for x in list if condition] |
推导式生成新列表再替换,安全且高效 |
方式选择的原则
- 仅需值:用
for item in list—— 可读性最高,性能也足够。 - 需修改元素:用
for i in range(len(list))—— 因为赋值操作必须通过索引完成。 - 需索引和值:用
enumerate(list)—— Pythonic,比range(len())访问更优雅。 - 需性能:三种方式性能差异极小(微秒级),优先考虑可读性而非微优化。
常见误区与最佳实践
- 遍历时删除元素:直接
for item in list: list.remove(item)会跳过元素或引发错误,应改用列表推导式或遍历副本for item in list[:]。 range(len(list))过时写法:除非确实需要修改元素,否则enumerate是更优选择。for i, _ in enumerate(list)忽略索引:若需索引但无需值,可用range(len(list))更直接(但通常直接迭代值就够)。- 大列表性能:使用
itertools模块(如islice)可惰性遍历节省内存,但日常场景极少需要。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!