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

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于切片的應用

哪位大牛幫我解釋一下,為什么以下兩個函數得到的結果不一樣?


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']


正在回答

2 回答

特意運行了一下

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”

0 回復 有任何疑惑可以回復我~
#1

悟空不會金箍棒 提問者

非常感謝!
2017-10-15 回復 有任何疑惑可以回復我~
#2

悟空不會金箍棒 提問者

我還是有個疑惑,既然r一直沒變,那么在R1函數的第二步中,r[0:-1] = r[-1:]這個等式的左側r[0:-1]應該等于"Ronald",右側r[-1:] = "o",兩者一交換就是"oRonald"了呀。
2017-10-15 回復 有任何疑惑可以回復我~
#3

慕粉9965376 回復 悟空不會金箍棒 提問者

這一步的r[0:-1]應該是“RonaldRonal”
2017-10-16 回復 有任何疑惑可以回復我~

根據你的想法我做了如下實驗

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

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758388    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

關于切片的應用

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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