2012-09-24 35 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]: ""