我想通过一个表进行反向循环,并将表项连接成一个字符串。这段代码工作得很好,但是它遗漏了表的最后一项:
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
。它将索引附加到每个项上,因此您可以同时遍历这两个项。不需要range
或len
。
# 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)