python笔记 切片

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

0 环境

  • 编辑器:idea
  • 系统版本:win10
  • python版本:3.9.6

1 切片的概念

什么是切片呢,类似xxx[开始位置:结束位置],网上专业的解释很多,就不多说了,我更倾向于大佬的形象解释:就好比切肉一样,告诉老板,选择好切哪段肉,他切好给你。

2 初试

若下面给出的代码,lists从数字0开始一直到14,索引也是从开始,我选择索引为4,那么返回的值就是4,单个元素的获取,那么我切片开始[1:4],结果是[1, 2, 3]呢,切片的操作规则左闭右开,可以类比数学学的高中知识,切片的[1:4]相当于数学中的[1,4),也就说从索引为1的元素开始取,一直取到索引4前面一个元素结束。而且属于原来的数据不修改,只返回值。

def slice_demo():
    lists = list(range(15))
    print(lists)
    print(lists[4])
    print(lists[1:4])
    print(lists[4:12])

if __name__ == '__main__':
    slice_demo()

image.png

3 懒人写法

有么有偷懒的写法呢,哪怕少些个数字,答案是肯定的。只有[:]相当于返回lists,先定义一下,[1:4]==>翻译过来[start:stop],好说明。在lists索引范围内斗,[:3] ==> [0:3],[5:] ==> [5:lists长度],越界处理:有时候会遇到start或stop超出边界,或者同时超了范围,是不会报错的。既然不会报错,那么它是怎么处理越界的问题,先假设范围是[0:15],start超出范畴,start等于索引0,stop超出范围,15。负数需要先计算,公式如下。当start大于等于stop,[]。

def slice_demo():
    lists = list(range(15))
    print(lists[:])
    # 正常
    print("正常 ==>", lists[:3])
    print("正常 ==>", lists[5:])
    # 越界
    print("越界 ==>", lists[:23])
    print("越界 ==>", lists[-25:])
    print("越界 ==>", lists[-25:123])
    print("越界 ==>", lists[25:-125])
    # 负数索引 计算方式 len(lists) + (-4)
    print("负数索引 ==>", lists[5:-4])
    print("负数索引 ==>", lists[-8:-4])

image.png