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
相关产品推荐
相关产品推荐

