2024-04-27 02:24:43 发布
网友
>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是1-11?
他们只是随机决定这样做,还是有一些我没有看到的价值?
因为更常见的是调用range(0, 10),它返回[0,1,2,3,4,5,6,7,8,9],其中包含10个元素,这些元素等于len(range(0, 10))。记住程序员更喜欢基于0的索引。
range(0, 10)
[0,1,2,3,4,5,6,7,8,9]
len(range(0, 10))
另外,请考虑以下常见代码段:
for i in range(len(li)): pass
你能看到如果range()精确到len(li)这会有问题吗?程序员需要显式地减去1。这也遵循了程序员喜欢for(int i = 0; i < 10; i++)而不是for(int i = 0; i <= 9; i++)的共同趋势。
range()
len(li)
for(int i = 0; i < 10; i++)
for(int i = 0; i <= 9; i++)
如果经常以1开头调用range,则可能需要定义自己的函数:
>>> def range1(start, end): ... return range(start, end+1) ... >>> range1(1, 10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
虽然这里有一些有用的算法解释,但我认为添加一些简单的“现实生活”推理可能会有所帮助,解释为什么它会这样工作,我发现这在向新来的年轻人介绍这个主题时很有用:
对于类似“range(1,10)”的问题,可能会因为认为一对参数代表“开始和结束”而产生混淆。
它实际上是开始和“停止”。
现在,如果它是“结束”值,那么,是的,您可能希望这个数字作为序列中的最后一个条目。但这不是“结束”。
其他人错误地将该参数称为“count”,因为如果只使用“range(n)”,那么它当然会迭代“n”次。当您添加start参数时,此逻辑将崩溃。
所以关键是记住它的名字:“停止”。 这意味着当到达迭代点时,迭代将立即停止。在那一点之后就不会了。
因此,虽然“开始”确实代表了要包含的第一个值,但当达到“停止”值时,它会“中断”,而不是在停止之前继续处理“该值”。
我在向孩子们解释这件事时用了一个比喻,讽刺的是,它比孩子们表现得更好!它不会在它应该停止后停止——它会立即停止而不完成它正在做的事情。(他们得到这个;)
另一个比喻是,当你开车时,你没有通过停车/让路/让路标志,结果它就停在你的车旁边或后面。严格地说,当你停下来的时候,你还没有到达它。它不包括在“你在旅途中经过的东西”中。
我希望这有助于向Pythonitos/Pythonitas解释!
独家系列确实有一些好处:
首先,range(0,n)中的每个项都是长度为n的列表的有效索引。
range(0,n)
n
而且range(0,n)的长度是n,而不是n+1,这是一个包含范围。
n+1
因为更常见的是调用
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开头调用range,则可能需要定义自己的函数:
虽然这里有一些有用的算法解释,但我认为添加一些简单的“现实生活”推理可能会有所帮助,解释为什么它会这样工作,我发现这在向新来的年轻人介绍这个主题时很有用:
对于类似“range(1,10)”的问题,可能会因为认为一对参数代表“开始和结束”而产生混淆。
它实际上是开始和“停止”。
现在,如果它是“结束”值,那么,是的,您可能希望这个数字作为序列中的最后一个条目。但这不是“结束”。
其他人错误地将该参数称为“count”,因为如果只使用“range(n)”,那么它当然会迭代“n”次。当您添加start参数时,此逻辑将崩溃。
所以关键是记住它的名字:“停止”。 这意味着当到达迭代点时,迭代将立即停止。在那一点之后就不会了。
因此,虽然“开始”确实代表了要包含的第一个值,但当达到“停止”值时,它会“中断”,而不是在停止之前继续处理“该值”。
我在向孩子们解释这件事时用了一个比喻,讽刺的是,它比孩子们表现得更好!它不会在它应该停止后停止——它会立即停止而不完成它正在做的事情。(他们得到这个;)
另一个比喻是,当你开车时,你没有通过停车/让路/让路标志,结果它就停在你的车旁边或后面。严格地说,当你停下来的时候,你还没有到达它。它不包括在“你在旅途中经过的东西”中。
我希望这有助于向Pythonitos/Pythonitas解释!
独家系列确实有一些好处:
首先,
range(0,n)
中的每个项都是长度为n
的列表的有效索引。而且
range(0,n)
的长度是n
,而不是n+1
,这是一个包含范围。相关问题 更多 >
编程相关推荐