簡體   English   中英

為什么print(x [0:10:-1])與print(x [::-1])不同?

[英]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 換句話說,索引是ii+ki+2*ki+3*k等,直到達到j時停止(但不包括j

因此,當您在[0:10:-1]指定i = 0, j = 10, k = -1時,不存在滿足方程0 <= n < (ji)/kn值,因此范圍為空。

另一方面,在[::-1]i == j == None 請參閱注釋5的下一部分:

如果省略ij或無,則它們將成為“結束”值(該結束取決於k的符號)。

由於k為負,因此i變為len(s) - 1 ,其值為9 j不能用任何數字表示(因為0會截斷最后一個字符)。

您應該了解基本規則x[start:stop:step] 在代碼中,您放置了兩個不同的規則: print(x[0:10:-1])print(x[::-1])

當您在startstop索引中未放置任何內容時,將使用默認值(取決於步驟)來執行代碼。 如果步長為正,則start索引將從0 startstop為字符串的長度。 在這里,你可以自定義startstop ,只要他們完成值start < stop 另一方面,如果step為負,則start索引將從字符串的最后一個索引開始,而stop則為0 在這里,你還可以自定義startstop ,只要價值,因為他們完成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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM