2012-09-24 30 views
3

我是python的新手,在閱讀切片符號時,遇到以下代碼片段。我能夠以非常簡單的例子理解並使用它,但在下面的示例中我無法掌握它的用法。任何解釋都會有幫助!Python中的切片符號 - 需要在代碼片段中說明

>>> a = [1,2] 
>>> a[1:1] = [3,4,5] 
>>> print a 
[1, 3, 4, 5, 2] 

>>> a = [1,2] 
>>> a[0:1] = [3,4,5] 
>>> print a 
[3, 4, 5, 2] 

回答

6
a[n:m] = b 
# is essentially* equivalent to 
a = a[:n] + b + a[m:] 

,你可以看這是 「替換a[n:m]b」(自a = a[:n] + a[n:m] + a[m:])。

*實際切片變異列表就地(即id(a)保持不變),這通常是最好(在不同的存儲位置設置wheras創建a=我們的新a)。

所以在你的例子:

a = [1,2] 
#a[1:1] = [3,4,5] 
a = a[:1] + [3,4,5] + a[1:] 
# [1]    [2] 
[1, 3, 4, 5, 2] 

a = [1,2] 
#a[0:1] = [3,4,5] 
a = a[:0] + [3,4,5] + a[1:] 
# []    [2] 
[3, 4, 5, 2] 
+0

這是否直接修改底層列表對象?如果是這樣,你的等價性不完全相同。可能值得注意任何一種方式。無論如何,這是理解的好幫手。 – Ben

+0

@本站不錯! ...你是對的! –

+0

@Ben我已經添加了這個*,我希望這是可以理解的/真實的... –

0

a[1:1]是在列表中的第一和第二要素之間的位置空切片。
所以a[1:1] = [3,4,5]的意思是「在列表的第一個元素之後插入元素3,4,5」。

a[0:1]是從第一個元素開始直到(但不包括)列表中第二個元素的切片。
因此a[0:1] = [3,4,5]表示「用元素3,4,5替換列表的第一個元素」。

也許這有助於可視化:

| h | e | l | l | o | <-- string "hello" 
0 1 2 3 4 5 <-- slice positions 
^---^     <-- slice [0:1]: "h" 
    ^     <-- slice [1:1]: ""