python 之切片

在这里插入图片描述

在 Python 中,切片(Slicing)是一种从序列中获取子序列的方法。序列可以是列表、字符串、元组等,它允许你获取序列的一部分,创建一个新的序列。切片的基本语法是 seq[start:stop:step]

基本切片语法

  • start:切片的起始位置(默认为序列的开头)。
  • stop:切片的结束位置(默认为序列的结尾)。
  • step:切片的步长(默认为 1)。
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 从索引 2 开始,到索引 5(不包括)为止,步长为 1
slice_1 = my_list[2:5]
print(slice_1)  # 输出: [2, 3, 4]

# 从索引 0 开始,到索引 7(不包括)为止,步长为 2
slice_2 = my_list[0:7:2]
print(slice_2)  # 输出: [0, 2, 4, 6]

# 默认情况下,省略 start 或 stop 将分别从序列的开头或结尾开始切片
slice_start = my_list[:4]  # 从索引 0 到 4(不包括)
slice_end = my_list[6:]  # 从索引 6 开始直到末尾
print(slice_start)  # 输出: [0, 1, 2, 3]
print(slice_end)  # 输出: [6, 7, 8, 9]

负索引

切片还支持使用负数索引,表示从序列末尾开始计数。
注意:列表中最后一个元素的负索引为-1

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 从索引 -5 开始,到末尾为止
slice_negative = my_list[-5:]
print(slice_negative)  # 输出: [5, 6, 7, 8, 9]
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

x = my_list[-3:-1:1]
print(x)
#输出 [7,8]

step 为负

在 Python 中,切片操作中的 step 参数允许您指定步长,决定取值的方向和间隔。当 step 参数为负数时,切片会从右向左提取元素。

基本的切片语法是 seq[start:stop:step]

使用负数的 Step

从右向左提取
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 从右向左提取,步长为 -1
reversed_list = my_list[::-1]
print(reversed_list)  # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
间隔提取
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 从右向左每隔一个元素提取
every_other = my_list[::-2]
print(every_other)  # 输出: [9, 7, 5, 3, 1]

注意事项

  • step 为负数时,start 参数需要大于 stop 参数。否则,将得到一个空列表。
  • 也就是[end : start : -n]
  • 使用负数步长的情况下,要注意确保正确的起始位置和结束位置,否则可能会得到意想不到的结果。
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 错误的使用方式,会得到空列表
incorrect_slice = my_list[2:7:-1]
print(incorrect_slice)  # 输出: []
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
slice = my_list[7:2:-1]
print(slice)
#输出[7,6,5,4,3]

负数的步长用于反向迭代列表或其他序列,也可以用于快速地反转列表内容。使用适当的起始和结束索引,负数的步长可以提供灵活的选择元素的方式。

切片的应用

切片可用于快速获取列表、字符串或其他序列的子集,并支持在循环中进行迭代、复制或反转等操作。

text = "Hello, World!"

# 使用切片进行反转
reverse_text = text[::-1]
print(reverse_text)  # 输出: "!dlroW ,olleH"

切片是 Python 中非常强大和灵活的特性,允许对序列进行各种操作,提取所需的子集,并对序列进行快速操作。

切片运用到字符串、元组、range对象

当应用切片操作于字符串、元组和 range 对象时,与列表切片类似,可以轻松获取这些序列的子集或执行特定的操作。下面将详细介绍在这些不同类型上的切片运用。

字符串切片

基本字符串切片
my_string = "Hello, World!"

# 获取子字符串
substring = my_string[7:12]
print(substring)  # 输出: "World"
使用步长进行操作
my_string = "Hello, World!"

# 逆序字符串
reversed_string = my_string[::-1]
print(reversed_string)  # 输出: "!dlroW ,olleH"

元组切片

基本元组切片
my_tuple = (1, 2, 3, 4, 5)

# 获取子元组
subtuple = my_tuple[1:4]
print(subtuple)  # 输出: (2, 3, 4)
使用步长进行操作
my_tuple = (1, 2, 3, 4, 5)

# 逆序元组
reversed_tuple = my_tuple[::-1]
print(reversed_tuple)  # 输出: (5, 4, 3, 2, 1)

range 对象切片

range 对象是一个不可变的序列类型,也支持切片操作。

基本 range 切片
my_range = range(10)

# 获取子 range 对象
subrange = my_range[2:7]
print(list(subrange))  # 输出: [2, 3, 4, 5, 6]
使用步长进行操作
my_range = range(10)

# 逆序 range 对象
reversed_range = my_range[::-1]
print(list(reversed_range))  # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

切片操作对字符串、元组和 range 对象都是十分有用的,允许您获取子序列、逆序排列以及应用其他切片操作。这些操作对于各种情况下的数据处理和序列操作非常实用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值