Python range反向循环疑问:为何stop参数设为-1而非0?
Python range函数参数疑问解答
先明确Python里range()的核心规则:它生成的是左闭右开的序列,并且判断是否继续生成下一个元素的逻辑和step的正负有关:
- 当
step为正数时,生成的元素必须小于stop才会被包含 - 当
step为负数时,生成的元素必须大于stop才会被包含
结合你的反向输出字符串代码来看:
字符串的索引是从0开始的,比如输入字符串长度为n,最后一个字符的索引是n-1,第一个字符的索引是0。我们需要遍历从n-1到0的所有索引,才能把整个字符串反向输出。
为什么stop设为-1?
原代码里的range(len(string)-1, -1, -1):
- start是最后一个字符的索引
len(string)-1 - step是-1,代表每次索引减1
- stop设为-1,因为step为负,只要当前索引大于-1就会被包含。0是大于-1的,所以索引0会被纳入循环,这样就能遍历到第一个字符,最终输出完整的反向字符串。
设为0会有什么差异?
如果把stop改成0,变成range(len(string)-1, 0, -1):
- step为负,此时只有当前索引大于0才会被包含。当索引减到0时,0不大于0,循环直接停止,导致索引0对应的原字符串第一个字符不会被输出。
举个实际例子:
假设输入字符串是"hello"(长度5,索引0-4):
- 用
range(4, -1, -1)会生成序列4,3,2,1,0,输出olleh - 用
range(4, 0, -1)会生成序列4,3,2,1,输出olle,漏掉了第一个字符h
内容的提问来源于stack exchange,提问作者noob
相关产品推荐
相关产品推荐

