Python中range()函数使用疑问:为何用range()而非直接遍历列表?
两段Python遍历代码的区别与range()的适用场景
一、两段代码的核心区别
先看代码本身:
代码1:
a = [1, 2, 3, 4, 5] for elem in range(len(a)): print(elem)
代码2:
a = [1, 2, 3, 4, 5] for elem in a: print(elem, end=' ')
两者的本质差异在于遍历的对象:
- 代码1通过
range(len(a))生成了列表a的索引序列(0,1,2,3,4),循环里的elem是列表的索引,最终输出0、1、2、3、4(每行一个)。 - 代码2直接遍历列表
a的元素本身,elem就是列表里的1、2、3、4、5,最终输出1 2 3 4 5(用空格分隔)。
二、直接遍历元素时,没必要用range()
能像代码2那样直接遍历元素的场景,优先用直接遍历的写法——这是Python的惯用风格,代码更简洁,意图更明确:你就是要处理列表里的元素,而不是索引。用range()绕一圈反而多此一举,可读性还更低。
三、什么时候需要用range()?
range()有它不可替代的使用场景,常见的有这几种:
- 需要操作元素索引的时候:比如要修改列表中指定位置的元素,或者需要同时用到索引和元素(不过这种场景更推荐用
enumerate(),比如for idx, val in enumerate(a):,比range(len(a))更优雅)。 - 需要控制遍历步长:比如想隔一个元素取一个,用
range(0, len(a), 2)就能实现从索引0开始,步长为2的遍历。 - 需要循环固定次数:比如要重复执行某个操作5次,直接写
for _ in range(5): do_something(),不需要额外创建列表。 - 逻辑依赖索引数值:比如某些算法需要用到索引参与计算,比如对比相邻元素的位置关系,这时候索引就成了必要的变量。
内容的提问来源于stack exchange,提问作者Natasha44
相关产品推荐
相关产品推荐

