python中的切片表示法 - 需要澄清代码片段

时间:2012-09-24 11:11:47

标签: 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]

2 个答案:

答案 0 :(得分: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)保持不变),这通常是更可取的(设置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]

答案 1 :(得分: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]: ""