【发布时间】:2020-06-04 11:17:54
【问题描述】:
s="abcd"
for i in range(len(s)-1)[::-1]:
print(s[i])
我不明白这个 for 循环是如何工作的?
【问题讨论】:
-
range不包括结尾,所以range(len(s))是0, 1, 2。 -
注意
len(s)-1中的负1
s="abcd"
for i in range(len(s)-1)[::-1]:
print(s[i])
我不明白这个 for 循环是如何工作的?
【问题讨论】:
range 不包括结尾,所以range(len(s)) 是0, 1, 2。
len(s)-1中的负1
类范围(开始,停止[,步骤])
范围类型表示不可变的数字序列,通常用于在 for 循环中循环特定次数。 (取自 python 文档)。
如需进一步阅读,请转到 python 文档:range
阅读以上内容(取自 python 文档)并打印表达式:range(len(s)-1)[::-1],
print(range(len(s)-1)[::-1])
产生:
range(2, -1, -1)
所以我们的代码变成了:
s="abcd"
for i in range(2, -1, -1):
print(s[i])
现在我希望你明白 python 在幕后做了什么!
【讨论】:
所以你的范围从 0 到 2 (len(s)-1) - 1 但[::-1] 反转范围发送的任何内容。
所以你的循环从 2 到 1 到 0
s = "abcd"
for 2 > it prints c
for 1 > it prints b
for 0 > it prints a
如果你想从d开始:
s="abcd"
for i in range(len(s))[::-1]:
print(s[i])
【讨论】:
对于s="abcd",我们有len(s)-1 等于3。
range(3) 生成 (0, 1, 2)。
(0, 1, 2)[::-1] 产生(2, 1, 0)。
所以 for 循环将在 (2, 1, 0) 中为 i 打印 s[i],从而得到 cba。
【讨论】:
这是因为您的范围被转换为range(2, -1, -1)。您只需从 range (len(s) -1)[::-1] 中删除 -1。
【讨论】: