關于切片的應用
哪位大牛幫我解釋一下,為什么以下兩個函數得到的結果不一樣?
name = "Ronaldo"
ln=list(name)
函數一:
def R1(r):
? ? r[-1:],r[0:-1] = r[0:-1],r[-1:]
>>> R1(ln)
>>> ln
['o', 'd']
函數二:
def R2(r):
? ? r[0:-1],r[-1:] = r[-1:],r[0:-1]
>>> R2(ln)
>>> ln
['o', 'R', 'o', 'n', 'a', 'l', 'd']
2017-10-15
特意運行了一下
R1函數:這句r[-1:],r[0:-1] = r[0:-1],r[-1:]其實是先后執行以下兩步:
1、r[-1:]=r[0:-1] ?#先把“Ronaldo”變成“RonaldRonald”,存在內存里,r這個時候還是“Ronaldo”,還沒有賦值為“RonaldRonald”
2、r[0:-1]=r[-1:] #再把“RonaldRonald”變成“od”,因為r還是“Ronaldo”,所以取'o'替換“RonaldRonald”中的“RonaldRonal”
執行完之后r才賦值為“od”
R2函數:也是相當于執行兩步:
1、r[0:-1]= r[-1:] # 先把“Ronaldo”變成“oo”,r依然是“Ronaldo”
2、r[-1:] =r[0:-1]# 再把“oo”變成“oRonald”
2018-01-23
根據你的想法我做了如下實驗
name = "Ronaldo"
ln=list(name)
ln[-1:],ln[0:-1],ln[:1] = ln[0:-1],ln[-1:],ln[:1]
print ln
>>> 'R','d'
由這個可以看出,“=”號前面是取內存里面的ln,后面是取原來的ln