前面的话:切片是Python非常强大的操作,适合于经常指定索引范围的操作,此时用循环时十分繁琐,但用Python提供的切片(Slice)操作符能大大简化这种操作。
我们先来看一个简单的示例,感受一下切片的强大。
假如我们要取一个list或者tuple中的部分元素,比如一个list如下:
`L = ["AFeng", "Javascript", "Python", "CSS", "HTML"]
取前三个元素,我们该怎么做?
最传统的方法:
但当我们需求改变时,这种方式就不再使用。比如取前n个元素。我们可是使用for循环实现。
>>> r = []
>>> n = 3
>>> for i in range(n):
r.append(L[i])
>>> r
['AFeng', 'Javascript', 'Python']
针对这种繁琐的操作,我们使用切片,一行代码就可以实现等效的操作。
>>> L[0:3]
['AFeng', 'Javascript', 'Python']
注意:索引是从0开始的,且这种规则是包左不包右。也就是取的是下标为0、1、2的元素。到下标为3时已经截止了。
索引范围可以从任意开始到任意截止。
在Python中,最强大的之处莫过于支持负索引,因此,可以像下面这样操作。
>>> L[-3:] #那么省略的默认是什么呢?
['Python', 'CSS', 'HTML']
>>> L[-3:0]
[]
# 经过验证省略的默认是取到最后
注意点:倒数第一个元素的索引是-1。
切片参数详解:L【start, stop, step】分别代表的是起始、截止和步长。
如何复制一个列表到另一个列表。
>>> L[:]
['AFeng', 'Javascript', 'Python', 'CSS', 'HTML']
tuple也可以看成一种特殊的list,唯一区别就是tuple具有不可变性。也可以对其进行切片操作,只不过操作的结果仍是一个tuple。
同时字符串也是一种list,每一个元素就是一个字符。因此字符串也可以进行切片操作。操作的结果仍是一个字符串。
迭代:通过for循环遍历一个可迭代对象的方式称为迭代(Iteration)。
在Python中,迭代是通过for in
来完成的。在很多其他语言中,遍历是通过下标完成的。这是因为Python的for循环的抽象程度更高。因为在Python中的for循环不仅可以用在list或者tuple上,还可以用在一切可迭代对象上,比如字符串,字典,集合等。
遍历一个字典:
>>> dicted = {
"name": "AFeng", "age": 18, "love": "web"}
>>> for key in dicted:
print(key)
name
age
love
从输出可以看到,默认情况下,对于字典来说,迭代是key,并且输出的顺序是任意的。但如果我们想迭代值,可以使用for value in dicted.values
,如果同时迭代key和value,可以使用for k, v in dicted.items()
。这种操作是把字典中的每一个键值对当做一个整体来处理。
当我们使用for循环时,只要作用于一个可迭代对象,for循环就能正常运行。
那么我们如何判断一个对象是不是可迭代对象了,方法是通过collections模块的Iterable类型来判断。具体如下:
>>> from collections import Iterable
>>>