(Python)列表中的切片功能的行为

时间:2017-03-03 09:49:32

标签: python slice

我正在学习Python并且对Slice的工作方式有基本的把握,但是我抓住了一段特殊的代码块:

L = [2,4,6,8,0]

L[0:3] = [2,4,6,8]

print L[4]

这个输出是8,我觉得很奇怪;我认为它仍然是0,因为我读第二行是“将列表的前4个元素转换为2,4,6,8”。这仍然会留下[2,4,6,8,0]的清单,这显然没有发生。如果有人能解释为什么Slice的表现如此,我将不胜感激!

3 个答案:

答案 0 :(得分:4)

>>> L = [2,4,6,8,0]
>>> L[0:3] = [2,4,6,8]
>>> L
[2, 4, 6, 8, 8, 0]

这会更改列表,L[0:3][2, 4, 6],因此您在6之后追加另外8个,这就是为什么第四个值现在是8的原因:

>>> L[4]
8

看看这张照片:

enter image description here

所以也许你想要的是L[0:4]L[:4]。希望这有帮助。

答案 1 :(得分:2)

输出为8因为您正在做的事情:

L[0:3] = [2,4,6,8]

您在列表8的末尾添加了额外的[2,4,6,8]

L[0:3] = [2,4,6,8]
print(L)

L[0:3]的长度为3,您可以为其分配4个值。这就是发生这种情况的原因。

输出:

  

[2,4,6,8,8,0]

如您所见,L[4]现在为8

答案 2 :(得分:0)

你应该这样做

L = [2,4,6,8,0]
L[0:4] = [2,4,6,8]
print L[4]

得到0

因为如果

L = [2,4,6,8,0]
L[0:3] 

指的是

[2,4,6]

L[0:4] 

指的是

[2,4,6,8]

所以在你的例子中,我认为你想要L [0:4],以便你可以将它们转换为新的值