[問題] 想問string 有關slice反轉 [::-1]的問題

看板Python作者 (嘿嘿馬)時間10年前 (2015/07/22 23:29), 編輯推噓4(4013)
留言17則, 3人參與, 最新討論串1/1
我想問有關反轉str的問題 str="play" print str[::-1] #yalp print str[0:len(str):-1] #none print str[len(str):0:-1] #yal print str[len(str)::-1] #yalp print str[-1:-5:-1] #yalp 如果step為正[::1],start默認為0而end默認為len(str) 我不知道為負[::-1]的第一個空白start和第二個空白end會帶入什麼 一開始以為會等於這個str[0:len(str):-1],但不是 我想請問step為負的時候,前面兩個默認是什麼 我爬了一下 相關的文章是 https://www.ptt.cc/bbs/Python/M.1291617432.A.045.html -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.45.83.68 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1437578947.A.0D3.html

07/22 23:50, , 1F
預設值都是 None,可試試 str[None:None:-1]
07/22 23:50, 1F

07/22 23:54, , 2F
str[None:None:-1] 可以耶 那填None要怎麼想?
07/22 23:54, 2F

07/22 23:58, , 3F
這簡單,看 Python 原始碼便知,http://goo.gl/mL1928
07/22 23:58, 3F

07/22 23:58, , 4F
在 PySlice_GetIndicesEx(...) 裡面有一段邏輯
07/22 23:58, 4F

07/22 23:59, , 5F
基本上就是如果 step = -1,則 defstart = length - 1
07/22 23:59, 5F

07/22 23:59, , 6F
defstop = -1,因此會產生新的 list 裝載相反的順序
07/22 23:59, 6F

07/23 00:02, , 7F
當然這個情況是在 start 跟 stop 都是 Py_None 的時候
07/23 00:02, 7F

07/23 00:02, , 8F
才會使用 defstart 跟 defstop,看看原始碼你就懂了 :)
07/23 00:02, 8F

07/23 08:45, , 9F
謝謝你,原來問題在原始碼
07/23 08:45, 9F

07/23 08:46, , 10F
所以Python就是ㄧ個用C語言來寫的程式囉?
07/23 08:46, 10F

07/23 08:47, , 11F
因此網路上說完美結合了C
07/23 08:47, 11F

07/23 09:03, , 12F
Python 有很多實作的版本,我猜測你是使用 CPython
07/23 09:03, 12F

07/23 09:04, , 13F
像是 IronPython 跟 PyPy 就是不同的 interpreter 實作
07/23 09:04, 13F

07/23 09:04, , 14F
其實這個問題官方文件有詳載 https://goo.gl/Tr13oP
07/23 09:04, 14F

07/23 09:09, , 15F
坦白說文件我花了好一回才找到 XD 看實作原始碼比較快
07/23 09:09, 15F

07/23 09:27, , 16F
我學的還很淺分不清楚版本,真的謝謝你用心的回答!
07/23 09:27, 16F

08/31 22:09, , 17F
感謝!!!!!
08/31 22:09, 17F
文章代碼(AID): #1LhxR33J (Python)
文章代碼(AID): #1LhxR33J (Python)