2016-11-06 186 views
0
name = list('ayushgupta') 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 
>>> name[5:5] = list('THE') 
>>> name 
['a', 'y', 'u', 's', 'h', 'T', 'H', 'E', 'g', 'u', 'p', 't', 'a'] 
>>> name[5:5] = [] 
>>> name 
['a', 'y', 'u', 's', 'h', 'T', 'H', 'E', 'g', 'u', 'p', 't', 'a'] 

如果我試圖用名稱[5:5]從名稱中刪除'T','H','E',則它不起作用。我知道我可以用名字[5:8]來刪除它。任何人都可以解釋爲什麼這樣嗎?python-從列表中刪除元素

回答

0

你要做的:

>>> name[5:8] = [] 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 

你這麼做的時候,name[5:5]=list('THE')THE得到了插入距離第五索引列表的第5索引列表。當你在做name[5:5] = []時,你並沒有刪除任何東西,而是試圖插入空的list,因此沒有改變。爲了更新從列表中的項目5至8索引,你所要做的name[5:8] = []

或者,你可以使用del刪除內容列表如下:

>>> del name[5:8] 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 
+0

「*任何人都可以解釋它爲什麼如此?*」。好? –

+0

@AndrasDeak已經在更新的方式,檢查編輯:) –

+3

好。您應該考慮花時間爲第一次嘗試提供完整的答案。它可以免除你一些降價。我只告訴你這一點,因爲我已經看到你顯示FGITW的行爲很多,我認爲這不利於提問者和網站。如果你給出答案,就把它做好。從長遠來看,你甚至會得到更多的代表。 –

0

參見:

name[5:5] 

表示:從索引5(含)至5獨佔)的元素

所以,你必須使用的東西,如

name[4:5] 

選擇(由相當複雜的方式)元素name[4]

1

您可以通過分配列表切片來更改列表的內容和長度。但是,您的切片是name[5:5]。請記住,一個切片不包含結束索引。因此,您的切片從name[5]開始並繼續,但不包括name[5]。換句話說,你的切片是

總之,您試圖刪除列表中已經爲空的部分。如果您嘗試使用實際切片,例如name[5:8],那麼您會更加成功。要只刪除一個項目,請嘗試name[5:6]。切片name[a:b]的長度爲b-a(如果b大於或等於a),這很容易記住。