关于python 切片的问题
天蓬老师
天蓬老师 2017-04-17 15:33:50
[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]

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
高洛峰

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

ringa_lee

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

PHPz

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

ringa_lee

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;
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号