中小微企业服务平台,百度搜索引擎优化怎么做,做婚介网站,仿照别的网站做#x1f4da;引言 #x1f64b;♂️作者简介#xff1a;生鱼同学#xff0c;大数据科学与技术专业硕士在读#x1f468;#x1f393;#xff0c;曾获得华为杯数学建模国家二等奖#x1f3c6;#xff0c;MathorCup 数学建模竞赛国家二等奖#x1f3c5;#xff0c…
引言 ♂️作者简介生鱼同学大数据科学与技术专业硕士在读曾获得华为杯数学建模国家二等奖MathorCup 数学建模竞赛国家二等奖亚太数学建模国家二等奖。 ✍️研究方向复杂网络科学 兴趣方向利用python进行数据分析与机器学习数学建模竞赛经验交流网络爬虫等。 在我们学习python的过程中非常重要的一个技巧就是对序列进行切片。常见的例如列表元组等数据结构都支持切片的功能。但是切片还有一些高级的用法很少有人用到下面就带大家一起来看看切片的高级用法。
切片的基础用法
想要深层次的了解切片的高级用法我们首先要从切片的基础用法说起。切片能够帮助我们取出一个范围对应的元素切片操作的基本表达式为
序列[序列开始的索引序列结束索引步长]看下面这个例子
example_list [i for i in range(10)]
# 从头取到尾
print(example_list[:])
# 从开始到序列为5的索引取一部分
print(example_list[:5])
# 取中间的一部分数据
print(example_list[2:5])
# 取中间的一部分数据步长为2
print(example_list[2:8:2])[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4]
[2, 3, 4]
[2, 4, 6]了解python的朋友们都知道切片默认是左闭右开的区间即在数学上的表示为[开始的索引,结束的索引)[开始的索引,结束的索引)[开始的索引,结束的索引)。但是很少有人探讨过为什么切片会有这个特性下面我们就来讨论为什么切片会忽略最后一个元素。
为什么切片是左闭右开的区间
其实使用左闭右开的规则有很多的好处主要有以下几个
当我们使用省略了开始索引的切片时我们可以快速的知道该切片有几个元素。
example_list_02 [i for i in range(10)]
# 我们快速的知道该切片有5个元素
example_list_02[:5] [0, 1, 2, 3, 4]当我们知道开始的索引和结束的索引的时候我们可以通过截止索引和开始索引做减法快速得到切片的元素个数。
example_list_03 [i for i in range(10)]
# 我们快速的知道该切片有3个元素
example_list_02[2:5] [2, 3, 4]我们可以利用一个下标X把一个序列分割成不会重叠的两个部分。
# 当我们想要快速的将一个数组分割成两份时可以只使用一个下标
example_list_03 [i for i in range(10)]
print(example_list_03[:5])
print(example_list_03[5:])[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]构建切片对象处理数据
切片对象slice是python的一个内置函数我们可以利用slice创建切片对象从而将其用到任何可以被切片的序列中。slice的创建形式如下
slice(起始索引, 终止索引, 步长)为了更好的理解上述切片对象的用法我们看下面这个例子
# 生成器表达式创建元组
example_tuple tuple(i for i in range(10))
print(example_tuple)
# 创建切片对象
slice_item slice(5,7)
# 使用切片对象进行切片
print(example_tuple[slice_item])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
(5, 6)在本例子中我么创建了一个元组作为示例。然后我们创建了一个切片的对象从而用它来代替切片时输入的索引做到一次定义多次使用。我们接着看另一个实用的例子
student_information
---name--- ---age--- ---sex---
tom 18 male
jack 20 male
jane 16 female
# 创建不同含义的切片对象
NAME slice(0,7)
AGE slice(7,13)
SEX slice(13,None)# 处理数据并利用切片对象进行处理
line_items student_information.split(\n)
for line in line_items[2:]:print(line[NAME],line[SEX])tom male
jack male
jane female在上述例子中我们处理了一个字符类型的学生信息表。定义了三个不同的切片最后应用到了我们的取值中。
为切片赋值
切片除了能够帮助我们快速取到想要的值之外还能帮助我们进行序列的原地修改删除或者链接。
这一切操作只需要将其看作一个变量放在赋值符号的左边请看下面这个·例子
# 创建示例列表
example_list_04 list(range(10))
print(example_list_04)
# 对序列中部分元素进行赋值
example_list_04[7:9] [99,100]
print(example_list_04)
# 将序列中的两个元素赋一个数字
example_list_04[7:9] [10000]
print(example_list_04)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 99, 100, 9]
[0, 1, 2, 3, 4, 5, 6, 10000, 9]在上述例子中我们将切片看作一个变量从而对其进行快速赋值。但是在使用这个方式对切片部分进行赋值的时候需要等号的右边是一个可迭代的对象如果我们将等号右边的位置仅安置了一个变量那么就会报错像下面这样
example_list_04[8:10] 10 TypeError: can only assign an iterable正确的撰写方式如下
example_list_04[8:10] [10]
print(example_list_04) [0, 1, 2, 3, 4, 5, 6, 10000, 10]另外我们还可以使用del将其作为一个删除的对象操作例如
example_list_05 list(range(10))
print(example_list_05)
del example_list_05[5:8]
print(example_list_05)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 8, 9]可以看到通过使用del我们将序列中间的部分内容删除了。
总结
在本文中我们介绍了切片强大的功能这其中包括切片对象、切片赋值多种用法。在编程中灵活使用这些语法会使得我们的程序更易读简洁。
如果你感觉本文对你有帮助不妨给我收藏点赞如果对于本文所介绍的东西有问题可以私信我或者评论与我讨论我们下次再见。