0

好的,所以我搜索了多个线程并遇到了关于反转列表的有用讨论,例如thisthis;我从中得到的是使用

S = ("hello")
print(S[::-1])

或者

S = ("hello")
print(S[len(S):-len(S)-1:-1])

但我不明白这背后的逻辑!假设我想使用

S = ("hello")
print(S[len(S):0:-1])

我会得到'olle'而不是'olleh',因为0或'h'是'end'并且python停在那里;所以我的直觉是超过 0,即 -1,所以它会停在 -1 并包括 0:

S = ("hello")
print(S[len(S):-1:-1])

但是突然python什么都没有返回?!是因为python认为它是len(S)-1吗?哦,我的上帝.. 那么 S[::-1] 之间的“是”什么使它起作用?S[len(S):-len(S)-1:-1] 有什么意义?-5-1?等于-6 ...所以

S = ("hello")
S[6:-6:-1]

工作......所以这意味着python将包括 6, 5 , 4 , 3 , 2 , 1, 0 , -1 , - ,-3 ,-4,-5??

4

1 回答 1

0
s[start: stop : step]

当步长值为负时:

这里 6 和 -6 实际上都超出了 的索引s,因为s只有 5 个字符长。因此,在这种情况下start选择值,并且值(-6)也超出索引,因此可以完全跳过它,python 将其用作它的值。min(6,len(s)-1)stopNone

>>> s = "HELLO"
>>> s[6:-6:-1]
'OLLEH'
>>> s[ min(6,len(s)-1) : -6 :-1]
'OLLEH'
>>> s[ min(6,len(s)-1) : None :-1] #None also works fine
'OLLEH'
>>> s[6:-6:-1]
'OLLEH'

现在,如果字符串超过 6 个字符:

>>> s = "HELLO, World"
#now you can't set the stop value as `None` as -6 is a valid index for this string.
>>> s[ min(9,len(s)-1) : -6 :-1]
'roW'
>>> s[ min(9,len(s)-1) : None :-1]  #can't use None this time
'roW ,OLLEH'
>>> s[9:-6:-1]
'roW'
于 2013-06-08T04:20:24.267 回答