You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环range为何有时不包含末尾值?两类场景疑问求助

解惑Python中range()的行为差异疑问

Hey there! Let's break this down step by step so you can see exactly what's happening with those two code snippets.

首先搞懂range()的核心规则

不管你用在什么场景里,Python的range(start, stop)都遵循左闭右开的原则:

  • 它会包含start这个起始值
  • 绝对不会包含stop这个结束值
  • 生成的序列是start, start+1, ..., stop-1

回到你第一个例子:

a=[]
for i in range(1,35):
    if i%7==0:
        a.append(i)
print(a)

这里range(1,35)生成的是从1到34的整数,35不在这个序列里,所以能被7整除的数是7、14、21、28,最终输出的a就是[7,14,21,28]——这完全符合range的规则。

为什么你觉得CSV代码里range包含了18?

这其实是个误解哦!你的这段CSV处理代码:

for i in range(1,18):
    if row[i]=='A':
        print(row)

range(1,18)生成的是1到17的整数,根本不会遍历到18。你觉得它包含18,大概率是这几种情况之一:

  • 你把CSV的行号和列表的索引搞混了:比如第18行对应的列表索引可能是17,而代码刚好命中了这一行
  • 你的row列表长度是18(索引从0到17),range(1,18)刚好覆盖了从索引1到17的所有元素,让你误以为是到了18
  • 可能你不小心把代码写成了range(1,19)(包含到18),但自己没注意到

总结一下

  • range的规则是统一的:永远不包含末尾的stop值
  • 第一个代码里35没被包含是正常行为
  • 第二个代码里绝对不会处理row[18],你的疑惑来自对代码执行逻辑的小误解

内容的提问来源于stack exchange,提问作者Aashna Chowdhury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:42:44