当切一个字符串时,我知道符号是[start:stop:counter]。如果是这样的话,如果我有string = "hello"
,为什么string[5:0:-1]
返回olle
而不是olleh
?string[::-1]
为我返回olleh
,所以这很好,但我对为什么第一个语法不起作用感到困惑
如果我们查看每个术语,这将依次创建:
string[5] doesn't exist, so adds nothing
string[4] is "o"
string[3] is "l"
string[2] is "l"
string[1] is "e"
string[0] 不会被调用,因为 Python 范围不会执行最后一个元素。
请记住,字符串的切片是从:up到(但不包括(:counter。因此,当您将-1
作为计数器传递时,这基本上是指从最后一个字符到第一个字符,但不包括它。因此:olle
.
看到如果删除 0,您也会得到完整的字符串:
string[5::-1]
返回:
olleh
string[5:0:-1]
这里,结束索引0
被排除在外,这是字符h
。为了包括拳头炭以及string[5::-1]
a[start:stop] # items start through stop-1
a[start:] # items start through the rest of the array
a[:stop] # items from the beginning through stop-1
a[:] # a copy of the whole array
如您所见,索引5
超出了范围:
string = "hello"
# 01234
print(string[5:0:-1])
但没关系,python 会通过忽略它来处理它。
喜欢:
print(string[100:0:-1])
输出:
olle
你知道在像string[0, 3]
这样的切片中,它将返回'hel'
(不包括索引3
(,所以反向切片也是如此,不包括停止索引。
您的停止索引是0
,这是'h'
,因此,输出不包括'h'
。
如果你想要的是反转字符串,你可以:
print(string[::-1])
输出:
olleh