前言

在我们使用Python的时候,经常会听到“切片”这个词!那什么是切片呢?切片是对序列数据(列表、元组、字符串),根据下标索引,对一定范围内数据的获取。
简单来说就是,通过下标索引获取一定范围内的元素。

基本索引

什么叫基本索引呢?
在Python中,对序列数据(列表、元组、字符串等),使用单个整数获取数据的方式,叫基本索引。
例如:

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])


Python中有语法糖:可以使用负数进行索引。
例如:

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])


下面,我们用一张表展示a的索引范围。非负下标索引和负数下标索引共同构成了Python索引的有效范围。

在基本索引中,索引超出有效范围时会报IndexError!!!

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
print(a[100])

基本切片

基本语法:
a[start : end],使用该语法之后,会获得a列表中左闭右开的一系列元素。当start和end为负数时,当作是负数索引进行切片即可。

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])

超出有效范围

使用基本索引的话,超出有效范围,就会报错。
而在切片中,如果超出有效范围是不会报错的。但是会进行截断,就是仍然按范围进行左闭右开的获取,但是超出序列数据范围的部分,全部假想成空值,最终对获取到的空值进行忽略即可。
例如:

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])# 超出有效范围
print("-" * 50)
print(a[-100:100])
print(a[3:55])

start在end的右边

当索引start在end的右边时,会发生什么呢?
不会报错。因为切不出元素,所以会返回一个空序列。

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])# 超出有效范围
print("-" * 50)
print(a[-100:100])
print(a[3:55])# 当start在end的右边
print("-" * 50)
print(a[8:2])

start或end为缺省时

start和end是可以为缺省的,当start和end为缺省时,Python是尽可能取最大区间的。
例如:

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])# 超出有效范围
print("-" * 50)
print(a[-100:100])
print(a[3:55])# 当start在end的右边
print("-" * 50)
print(a[8:2])# 缺省
print("-" * 50)
print(a[:5])
print(a[2:])

可以调整步长的切片

语法是:a[start : end :step],表示从start开始,每step取一个值,直到跨越了end(不包含end),step可正可负,不为0.
其实咋们平时用的基本切片就是step为1的切片!

step为正

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])# 超出有效范围
print("-" * 50)
print(a[-100:100])
print(a[3:55])# 当start在end的右边
print("-" * 50)
print(a[8:2])# 缺省
print("-" * 50)
print(a[:5])
print(a[2:])# 带有步长的切片
# 步长为正
print("*" * 50)
print(a[0:7:2])
print(a[::2])
print(a[:-3:2])
print(a[-100:-4:3])

step为负

当step为负时,会进行逆序切片。因为当缺省时,python尽可能使获取到的区间尽可能大,那么缺省时,start会趋近无穷大,end会趋近无穷小。

# coding:utf-8a = []
for i in range(10):a.append(i)print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])
# 索引超出有效索引范围
# print(a[100])
# 基本切片
print(a[2:8])
print(a[-5:-2])
print(a[2:-1])# 超出有效范围
print("-" * 50)
print(a[-100:100])
print(a[3:55])# 当start在end的右边
print("-" * 50)
print(a[8:2])# 缺省
print("-" * 50)
print(a[:5])
print(a[2:])# 带有步长的切片
# 步长为正
print("*" * 50)
print(a[0:7:2])
print(a[::2])
print(a[:-3:2])
print(a[-100:-4:3])# 步长为负时
print("@" * 50)
print(a[::-1])
# 为了保证取到的区间尽可能大,所以end趋向无穷小,所以会切到索引0
print(a[6::-1])
# 因为逆序切,为了保证取到的区间尽可能大,所以start会趋向于无穷大,一直切到索引4(不包含4)
print(a[:4:-2])

完结,撒花撒花…

详解Python中的切片(一看就懂版)相关推荐

  1. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  2. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  3. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  4. python操作符op_详解python中的 is 操作符

    大家可以与Java中的 == 操作符相互印证一下,加深一下对引用和对象的理解.原问题: Python为什么直接运行和在命令行运行同样语句但结果却不同,他们的缓存机制不同吗? 其实,高票答案已经说得很详 ...

  5. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  6. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  7. python expandtabs_详解Python中expandtabs()方法的使用

    详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...

  8. python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...

  9. 详解Python中的封装

    文章目录 详解Python中的封装 基础入门 -> setter.getter 进阶使用 -> __ 私有属性 _ 强化加强 -> property 详解Python中的封装 面向对 ...

最新文章

  1. 如何更改PostgreSQL用户密码?
  2. android版本更新提示安装失败,android4.4.2系统更新后总是安装失败
  3. python怎么读取txt文件并统计其字数-python计算文件的行数和读取某一行内容的实现方法...
  4. 【视频课】Pytorch模型分析进阶(可视化,参数量与计算量,计算速度)
  5. 客户主数据冻结与删除标记位汇总
  6. mysql数据库技术方案,MySql数据库优化方案
  7. boost::hana::slice用法的测试程序
  8. hdu 1280用hash解决。。
  9. Django 和 html
  10. Hibernate的执行流程——SessionFactory的创建
  11. Core Animation 文档翻译 (第二篇)—核心动画基础要素
  12. socketmq 设置队列大小_TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?...
  13. spark RDD概念及组成详解
  14. 开源mysql客户端_14款经典的MySQL客户端软件
  15. 今天我们来聊聊递归喝汽水问题
  16. 软件设计模式——建造者模式
  17. FP Tree算法原理
  18. 服务器如何修改3389端口,怎么修改服务器3389端口
  19. 我看过《隐秘的角落》才知道,理科生有多可怕!
  20. BOGNER博格纳宣布演员王紫璇、超模雎晓雯担任品牌大使

热门文章

  1. js生成随机数/数组(marksheng)
  2. android精品开源项目
  3. Android 优酷
  4. CnOpenData机场航班信息数据
  5. 20141120 N2
  6. Python+Requests实现接口自动化
  7. mybatis if标签中判断字符串相等
  8. 毕业设计 基于STM32与wifi的天气预报网时钟系统 - 物联网 单片机
  9. Visio中mathtype公式粘贴到word中模糊
  10. 5G天线新工艺,5G移印导电银浆使未来手机更加轻薄绚丽