介绍
切片是Python中非常常用的操作,是一种获得部分序列的方式,其实现方式非常灵活,能够根据需要获得列表、字典、字符串等类型的部分数据。下面我们来深入地了解Python3中如何使用切片。
基本用法
列表切片
在Python中,使用切片操作可以获得列表的部分元素,可以使用一对方括号[]以及冒号:来指定切片的范围,例如:
a = [1, 2, 3, 4, 5]
a[1:3]
这个代码的结果将是[2, 3],表示获得列表a中从第2个元素到第3个元素(不包括第3个元素)的所有元素。
除了指定两个数字来表示切片范围之外,还可以使用一些简写的形式来表示,例如:
a = [1, 2, 3, 4, 5]
a[:3] # [1,2,3]
a[1:] # [2,3,4,5]
a[:] # [1,2,3,4,5]
a[::2] # [1,3,5]
这里的a[:3]表示从a列表的开始到第三个元素(不包括第三个元素),即[1,2,3];a[1:]表示从a列表的第二个元素(包括第二个元素)到结束,即[2,3,4,5];a[:]表示获得整个a列表的副本,即[1,2,3,4,5];a[::2]表示从a列表开始到结束,每隔一个元素取一个,即[1,3,5]。
同时,我们也可以针对列表进行增删改操作,例如,我们可以通过切片赋值的方式来改变列表中的元素:
a = [1, 2, 3, 4, 5]
a[1:3] = [0, 0]
# a 现在为 [1, 0, 0, 4, 5]
以上代码将会把a列表从第二个元素(包括第二个元素)到第四个元素(不包括第四个元素)替换为[0, 0]。
另外,我们还可以删除列表中的元素,例如:
a = [1, 2, 3, 4, 5]
a[1:3] = []
# a 现在为 [1, 4, 5]
以上代码将会把a列表中从第二个元素(包括第二个元素)到第四个元素(不包括第四个元素)移除。
字符串切片
字符串也是Python中非常常用的类型,可以通过切片操作获得其中的部分字符。例如:
a = 'hello world'
a[1:5] # 'ello'
这里的a[1:5]表示获得a字符串中从第二个字符(包括)到第五个字符(不包括)之间的所有字符,即'ello'。
字符串的切片操作与列表的切片操作非常类似,也可以使用简单切片或者复杂切片方式来获得字符串中的指定部分,例如:
a = 'hello world'
a[:5] # 'hello'
a[6:] # 'world'
a[::2] # 'hlowrd'
这里的a[:5]表示获得a字符串中从开始到第五个字符(不包括)之间的所有字符,即'hello';a[6:]表示获得a字符串中从第七个字符(包括)到结束的所有字符,即'world';a[::2]表示获得a字符串中从开始到结束,每隔一个字符取一个字符,即'hlowrd'。
字典切片
Python中的字典也支持切片操作,不过由于字典是由键-值对组成的映射表,所以字典的切片操作实际上是取出了一部分键-值对的映射。例如:
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
keys = list(d.keys())
sub_keys = keys[1:3]
sub_dict = {key: d[key] for key in sub_keys}
# sub_dict 现在为 {'b': 2, 'c': 3}
这个代码的意思是,我们首先使用key()方法获得了一个字典d中所有的键值,然后使用列表切片方式获得了其中从第二个元素到第四个元素(不包括第四个元素)所表示的所有键。最后,我们使用推导式来从原始字典d中取出所有的键值对,并构造出了一个子字典,其中包含了字典d中的第二个元素和第三个元素。
高级用法
步长参数
在切片操作中,可以通过第三个参数指定步长,用来控制每隔几个元素取一个元素,例如:
a = [1, 2, 3, 4, 5]
a[::2] # [1, 3, 5]
a[1::2] # [2, 4]
这里的a[::2]表示从a列表开始到结束,每隔一个元素取一个,即[1,3,5];a[1::2]表示从a列表的第二个元素(包括第二个元素)到结束,每隔一个元素取一个,即[2,4]。
负数参数
切片操作中,还可以通过负数参数来表示从后向前计数,例如:
a = [1, 2, 3, 4, 5]
a[-2:] # [4, 5]
这里的a[-2:]表示获取a列表中倒数第二个元素到列表结尾的所有元素,即[4, 5]。
删除后保留指定元素
在列表切片中,还可以通过删除后保留指定元素的方法来过滤列表中的元素。例如:
a = [1, 2, 3, 4, 5]
del a[1:3]
# a 现在为 [1, 4, 5]
这里的a[1:3]表示删除a列表中从第二个元素(包括第二个元素)到第四个元素(不包括第四个元素)之间的所有元素,即[2,3]。由于使用del命令删除元素对原始列表进行了修改,所以a现在为[1,4,5]。
总结
切片是Python中非常常用的操作,是一种获得部分序列的方式,可以用于列表、字典、字符串等类型,其实现方式非常灵活,能够根据需要获得不同类型的部分数据。使用切片操作可以非常方便地增删改查列表中的元素、获得字符串中的指定字符、取出字典中的子集等。除此之外,我们还可以使用步长参数、负数参数、删除后保留指定元素等高级操作来对列表进行更加复杂的操作。