为什么这个反向的for循环遗漏了最后一项?



我想通过一个表进行反向循环,并将表项连接成一个字符串。这段代码工作得很好,但是它遗漏了表的最后一项:

t = [0, 0, 2, 6, 14, 4, 7, 0]
for i in range(len(t) - 1, 0, -1):
res = str(t[i]) + res
return res

打印02614470而不是002614470

我知道如果我在循环参数中将0更改为-1,它将正常工作,但我想了解原因。似乎当我想用-1作为步长时,中间的参数(在这种情况下是0)加+1。例如,如果我想让循环在索引1处停止,我必须在参数中写0。对吗?

这是我的思考过程,但我不知道它是否正确。

使用range()的for循环的典型结构是:

t=[0,0,2,6,14,4,7,0]
for i in range(0,len(t)):
print(f"{i}, {t[i]}")

对于从0开始且长度为len()的元素列表进行迭代是有意义的。由于我们从0开始,我们必须在比len(t)返回的值小1处停止,因此构建range()是为了适应这种最常见的情况。正如您在示例中注意到的那样,由于要反转,因此必须遍历并使用-1来捕获列表中的第0个索引。幸运的是,您可以使用以下语法来反转范围,从而提高可读性:

t=[0,0,2,6,14,4,7,0]
for i in reversed(range(0,len(t))):
print(f"{i}, {t[i]}")

第二个参数是stop值,以便从生成中排除。

例如,当执行range(10)时,Python将其处理为range(0,10)并生成值0,1,2,…,7,8,9(即不是10)

反过来,如果你想包含零,你必须将停止值设置在下一个低于零的值(即-1)

其他答案解释了range不包括结束号码。无论范围是向前的还是向后的,它总是在结束前一个位置停止。

我想添加更多的" python "编写循环的方法。根据经验,尽量避免循环遍历列表索引,而是直接循环遍历

things = [...]
# Forward over items
for thing in things:
print(thing)
# Backward over items
for thing in reversed(things):
print(thing)

如果你想索引使用enumerate。它将索引附加到每个项上,因此您可以同时遍历这两个项。不需要rangelen

# Forward over items, with indices
for i, thing in enumerate(things):
print(i, thing)
# Backward over items, with indices
for i, thing in reversed(enumerate(things)):
print(i, thing)

相关内容

  • 没有找到相关文章

最新更新