[英]Why isn't `print(x[0:10:-1])` the same as `print(x[::-1])`?
如果您在Python中定義一個字符串,例如:
x = "1234567890"
print(x[::-1])
以相反的順序打印字符串,但print(x[0:10:-1])
打印任何內容。
他們為什么不打印相同的東西?
請參閱相關文檔的注釋5:
S的從i到與步驟k j中的切片被定義為與索引項的序列
x = i + n*k
,使得0 <= n < (ji)/k
。 換句話說,索引是i
,i+k
,i+2*k
,i+3*k
等,直到達到j時停止(但不包括j )
因此,當您在[0:10:-1]
指定i = 0, j = 10, k = -1
時,不存在滿足方程0 <= n < (ji)/k
的n
值,因此范圍為空。
另一方面,在[::-1]
, i == j == None
。 請參閱注釋5的下一部分:
如果省略i或j或無,則它們將成為“結束”值(該結束取決於k的符號)。
由於k
為負,因此i
變為len(s) - 1
,其值為9
。 j
不能用任何數字表示(因為0
會截斷最后一個字符)。
您應該了解基本規則x[start:stop:step]
。 在代碼中,您放置了兩個不同的規則: print(x[0:10:-1])
和print(x[::-1])
。
當您在start
和stop
索引中未放置任何內容時,將使用默認值(取決於步驟)來執行代碼。 如果步長為正,則start
索引將從0
start
, stop
為字符串的長度。 在這里,你可以自定義start
和stop
,只要他們完成值start < stop
。 另一方面,如果step為負,則start
索引將從字符串的最后一個索引開始,而stop
則為0
。 在這里,你還可以自定義start
和stop
,只要價值,因為他們完成start > stop
。
在您的情況下,您編寫了print(x[0:10:-1])
,但沒有任何回報。 顯然,這是因為在步驟為負數時將0
設置為起始索引,將10
為終止索引。
參考: https : //www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3
您正在尋找print(x[10:0:-1])
。
>>> x = list(range(10))
>>> x[10:0:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
我們可以使用以下偽代碼對x[start:end:step]
進行建模:
i = start
if start < end:
cond = lambda: i < end
else:
cond = lambda: i > start
while cond():
SELECT x[i]
i += step
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.