详解Python中的切片(一看就懂版)

前言

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

基本索引

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

# coding:utf-8

a = []
for i in range(10):
    a.append(i)

print(a)
# 基本索引
print("第0个元素为", a[0])


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

# coding:utf-8

a = []
for i in range(10):
    a.append(i)

print(a)
# 基本索引
print("第0个元素为", a[0])
# 使用负数索引
print("第-2个元素为", a[-2])


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

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

# coding:utf-8

a = []
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-8

a = []
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-8

a = []
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-8

a = []
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-8

a = []
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-8

a = []
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-8

a = []
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])

完结,撒花撒花…

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年6月26日
下一篇 2023年6月26日

相关推荐