PyThon range()函数中for循环用法

range()是Python生成整数序列的内置函数,返回range对象而非列表,支持三种调用形式:range(stop)、range(start, stop)、range(start, stop, step),常用于for循环控制次数或索引遍历,需注意stop不包含、step不能为0等细节。

range() 是 Python 中生成整数序列的内置函数,常配合 for 循环 使用,用来控制循环次数或遍历索引。它不直接生成列表(Python 3 中返回的是 range 对象),内存友好、效率高。

基本语法与三种写法

range() 有三种常用调用形式:

  • range(stop):从 0 开始,到 stop-1 结束(不包含 stop),步长为 1。例如 range(5) 生成 0, 1, 2, 3, 4。
  • range(start, stop):从 start 开始,到 stop-1 结束,步长为 1。例如 range(2, 7) 生成 2, 3, 4, 5, 6。
  • range(start, stop, step):指定起始、结束和步长(可正可负)。例如 range(0, 10, 2) 生成 0, 2, 4, 6, 8;range(5, 0, -1) 生成 5, 4, 3, 2, 1。

for 循环中常见用法

range() 最典型用途是控制循环执行次数,或按索引访问序列元素:

  • 重复执行某段代码 n 次:for i in range(3): print("Hello") 输出 3 次。
  • 遍历字符串/列表的索引:text = "abc"; for i in range(len(text)): print(i, text[i]) 输出索引和对应字符。
  • 反向遍历:for i in range(len(lst)-1, -1, -1): print(lst[i]) 从末尾向前取元素。

注意细节和易错点

使用 range() 配合 for 循环时,这些细节容易被忽略:

  • range 的 stop 值永远不包含在序列中,类似切片规则。
  • step 为 0 会报 ValueError;step 为负时,start 必须大于 stop,否则得不到任何值。
  • range 对象支持 inlen()、索引(如 range(5)[2]),但不是列表,不能直接修改或追加。
  • 若需真正列表,得显式转换:list(range(3))[0, 1, 2]

替代方案与何时不用 range

不是所有循环都需要 range():

  • 直接遍历元素更简洁:for item in my_list:for i in range(len(my_list)): 更 Pythonic。
  • 需要索引和元素时,优先用 enumerate()for i, item in enumerate(my_list):
  • 处理非整数步进(如小数)、无限序列等场景,range 不适用,可考虑 itertools.count() 或生成器。

基本上就这些。掌握 range 的三种形式和边界行为,for 循环里的计数和索引操作就很少出错了。