>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是 1-11?
他们是随机决定那样做还是有一些我没有看到的价值?
原文由 MetaGuru 发布,翻译遵循 CC BY-SA 4.0 许可协议
>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是 1-11?
他们是随机决定那样做还是有一些我没有看到的价值?
原文由 MetaGuru 发布,翻译遵循 CC BY-SA 4.0 许可协议
尽管这里有一些有用的算法解释,但我认为添加一些简单的“现实生活”推理可能会有所帮助,以说明为什么它以这种方式工作,我发现这在向年轻的新手介绍该主题时很有用:
对于像“范围(1,10)”这样的东西,可能会因为认为一对参数代表“开始和结束”而产生混淆。
它实际上是启动和“停止”。
现在,如果它 是“结束”值,那么,是的,您可能希望该数字将作为序列中的最后一个条目包含在内。但这不是“结束”。
其他人错误地称该参数为“count”,因为如果您只使用“range(n)”,那么它当然会迭代“n”次。当您添加 start 参数时,此逻辑就会中断。
所以重点是要记住它的名字:“ 停止”。这意味着它是到达时迭代将立即停止的点。不是 在 那一点之后。
因此,虽然“开始”确实代表要包含的第一个值,但在达到“停止”值时它会“中断”,而不是在停止之前继续处理“那个”。
我在向孩子们解释这一点时使用的一个类比是,具有讽刺意味的是,它比孩子们表现得更好!它并没有在它应该停止 之后 停止——它没有完成它正在做的事情就立即停止了。 (他们明白了;))
另一个类比——当你开车时,你不会 通过 停止/让行/“让路”标志,最终它会停在你的车旁边或后面的某个地方。从技术上讲,当你停下来时你仍然没有达到它。它不包括在“你在旅途中传递的东西”中。
我希望其中一些有助于向 Pythonitos/Pythonitas 解释!
原文由 dingles 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
4 回答936 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
因为调用
range(0, 10)
更常见,它返回[0,1,2,3,4,5,6,7,8,9]
包含 10 个元素,等于len(range(0, 10))
。请记住,程序员更喜欢基于 0 的索引。另外,请考虑以下常见代码片段:
你能看出如果
range()
正好上升到len(li)
这会有问题吗?程序员需要显式地减去 1。这也符合程序员更喜欢for(int i = 0; i < 10; i++)
而不是for(int i = 0; i <= 9; i++)
的普遍趋势。如果您经常调用以 1 开头的范围,您可能需要定义自己的函数: