素材牛VIP会员
关于python 切片的问题
 ba***pc  分类:Python  人气:1067  回帖:4  发布于6年前 收藏
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]

 标签:python

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv2 入门
阿***逗 移动开发工程师 6年前#1

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

Lv6 码匠
de***oo 页面重构设计 6年前#2

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

Lv7 码师
un***oo 职业无 6年前#3

首先清楚切片[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

Lv5 码农
简***兽 Web前端工程师 6年前#4

Python-2.7.8/objects/listobject.c +687

c    else if (d > 0) { /* Insert d items */
        k = Py_SIZE(a);
        if (list_resize(a, k+d) < 0)
            goto Error;
        item = a->ob_item;
        memmove(&item[ihigh+d], &item[ihigh],
            (k - ihigh)*sizeof(PyObject *));
    }
    for (k = 0; k < n; k++, ilow++) {
        PyObject *w = vitem[k];
        Py_XINCREF(w);
        item[ilow] = w;
    }
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取