关于python 切片的问题

n = [1,5]
n[1:1] = [2,3,4]
n
>>>[1,2,3,4,5]

n[1:1]返回是[]
为什么[2,3,4]会插入到1,5之间而不是后面,如果想插入一组在[1,5]之后要如何通过切片方式完成?

谢谢楼下几位耐心解答,我又试了试,找到了原理,如果n[1:1]就是在下标1之前插入,如果想在后面插入,可以写成n[2:2] = [2,3,4] 或者 n[2:-1] = [2,3,4] 或者 n[2:] = [2,3,4]

1代表从编号是1的元素前插入,也就是5前,所以插入了234就是12345。而你问的怎么插入1和5之间不正是你展示的例子吗

首先清楚切片[start:end]
取代位置[start,end-1]
1. 如果end-1 >= start,那么取代这一段的值。
2. 反之,则在start-1后面插入。
[1:1] 从下标1开始,下标1是5,本来要取代5的,但是第二个参数1,意思是终止于下标1,但是不包括1.
所以就变成了插入[2,3,4]。
你可以做个试验
n = [1,5]
n[1:2] = [2,3,4]
n = [1,2,3,4] 这时候2,3,4 就取代了5

你这个不就是插入到之间了么?往后加用append

Python-2.7.8/objects/listobject.c +687

c else if d > 0 { /* Insert d items */ k = Py_SIZEa; if list_resizea, k+d < 0 goto Error; item = a->ob_item; memmove&item[ihigh+d], &item[ihigh], k - ihigh*sizeofPyObject *; } for k = 0; k < n; k++, ilow++ { PyObject *w = vitem[k]; Py_XINCREFw; item[ilow] = w; }

发表评论

电子邮件地址不会被公开。 必填项已用*标注