以相反的顺序进行Python切片分配并不起作用!为什么?

时间:2014-08-10 05:20:37

标签: python list python-2.7 variable-assignment slice

关于Python如何将列表实际分配​​给现有列表的切片,没有太多讨论。

例如,我做了以下事情:

l = [1,2,3,4,5,6]

l[2:5:1] = [7,7,7]

print l #prints [1, 2, 7, 7, 7, 6]

g = [1,2,3,4,5,6]

g[5:2:-1] = [7,7,7]

print g #prints [1, 2, 3, 7, 7, 7]

h = [1,2,3,4,5,6]

h[2:5:1] = [7,7,7,7]

print h #prints [1, 2, 7, 7, 7, 7, 6]


k = [1,2,3,4,5,6]

k[5:2:-1] = [7,7,7,7]

print k #gives a runtime error

实例:http://ideone.com/0mDBg7

有人可以解释一下这是如何工作的,以及为什么最后一个例子没有成功运行,就像它上面的那个(运行h,但不是k)?

1 个答案:

答案 0 :(得分:3)

如果切片长度的step不是1,则切片的长度和指定序列的长度应匹配。

>>> k = [1,2,3,4,5,6]
>>> len(k[5:2:-1])
3
>>> k[5:2:-1] = [7,7,7]  # This is okay, lengths are same.
>>> k
[1, 2, 3, 7, 7, 7]

>>> k[5:2:-1] = [7,7,7,7]  # not okay
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 4 to extended slice of size 3

如果切片1的长度(默认),则可以指定长度不同的序列;这将改变列表的长度。

>>> k[1:5] = [1]
>>> k
[1, 1, 7]