亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何反轉字符串與字符串一起工作[ : :-1]

如何反轉字符串與字符串一起工作[ : :-1]

汪汪一只貓 2022-08-11 20:22:25
我知道切片語法包含3個參數,即:開始停步具有以下默認值:開始 = 0停止 = 字符串的長度步驟 = 1所以,對于> string = "abc"> string[::]會再來> "abc"但是,對于> string[::-1]它不應該返回:> "a"由于,string[start = 0] = 'a' 然后,string[start + step],即 string[0-1] = 'c',但由于它不小于 stop = 3,它將中斷?;蛘呶沂欠裨阱e誤的方向上思考,python只是將字符串切成通常的方向,如果步驟為負,則返回該字符串的反向?為了簡化,負步驟如何在內部工作?
查看完整描述

2 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

當提供負步長值時,Python 會交換開始值和停止值。此外,如果未提供開始值和停止值,則默認為序列的開頭和結尾。

給定 ,內置類型文檔的“通用序列操作”部分中的以下引用適用:s[i:j:k]

如果省略 i 或 j 或 None,它們將成為“結束”值(哪個結束取決于 k 的符號)。


關于它在引擎蓋下的工作方式,在CPython中有兩個用于處理列表下標的函數,list_subscript()(用于閱讀)和list_ass_subscript()(用于分配)。

在這兩個函數中,在驗證下標是否指定了切片后,將調用 PySlice_Unpack() 和 PySlice_AdjustIndices() 來提取和規范化開始和停止值。

啟動值處理

從 PySlice_Unpack():

if (r->start == Py_None) {
    *start = *step < 0 ? PY_SSIZE_T_MAX : 0;

如果起始值為負,則起始值設置為最大可能值。None

然后,在 PySlice_AdjustIndices() 中

else if (*start >= length) {
    *start = (step < 0) ? length - 1 : length;

如果起始值大于列表的長度(這無疑是由于上面的賦值)并且步長值為負,則起始值設置為(即 指序列的長度)。length - 1length

停止值處理

從 PySlice_Unpack():

if (r->stop == Py_None) {
    *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;

如果止損值為負,則停止值設置為盡可能小的值。None

然后,在 PySlice_AdjustIndices() 中

if (*stop < 0) {
    *stop = (step < 0) ? -1 : 0;

如果停止值為負(這是由于上面的賦值)并且步長值為負,則停止值設置為 -1。

因此,使用 的輸入,您最終會得到:string[::-1]

  • 起始值:len(字符串) - 1

  • 停止值:-1

  • 步驟: -1


查看完整回答
反對 回復 2022-08-11
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

當負值作為 傳遞時,默認值為 和 反轉。 從“序列開始”更改為“序列結束”,并從“序列結束”更改為“序列開始”。如果它不這樣做,你在執行一個完整的切片時會遇到問題,因為任何切片的結尾都是獨占的; 會排除第一個字符(因為不會被包括在內),你不能通過一個過去,因為那只是意味著同樣的事情(感謝Python如何處理負索引),你根本不會切除任何東西。使默認值切換,以便省略結束(或等效地顯式傳遞)一直運行到開頭,包括,是唯一明智的解決方案。stepstartstopstartstopmystr[len(mystr)-1:0:-1]0-10len(mystr)-1None



查看完整回答
反對 回復 2022-08-11
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號