切片
对有序序列中取指定范围索引的操作,python 提供了切片(slice)操作符,语法:list[start,end,seq]
元组 tuple ,字符串 str 也支持切片操作
if __name__ == '__main__':# 生成一个列表ints = [i for i in range(0, 20)]# 获取索引为 [0,10) 的元素# 索引为 0 时可以省略不写print(ints[:10]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 获取倒数第一个元素print(ints[-1]) # 19# 获取倒数的三个元素print(ints[-3:]) # [17, 18, 19]# 获取 [-3,-1) 的元素print(ints[-3:-1]) # [17, 18]# 获取前5个数print(ints[:5])# 获取后5个数print(ints[-5:])# 每隔2个取一个print(ints[::2])# 原样复制new_list = ints[:]
迭代
python中,list、tuple、str、dict 都可以通过 for 循环进行遍历,称为迭代
enumerate():可以将序列变成“索引-元素对”,这样在 for 循环中同时迭代索引和元素本身
if __name__ == '__main__':# 遍历list:带索引names = ['Bob', 'Lily', 'Candy']for index, val in enumerate(names):print("index:%s \t value:%s" % (index, val))# 遍历元组tuple:带索引names = ('Bob', 'Lily', 'Cindy')for index, val in enumerate(names):print("index:%s \t value:%s" % (index, val))# 遍历字符串strnames = '世界,您好'for index, val in enumerate(names):print("index:%s \t value:%s" % (index, val))# 遍历 dictnames = {"name": "Bob", "age": 18}for key in names: # dict 默认迭代的是 keyprint(key)for val in names.values(): # 遍历 dict 的valueprint(val)for key, val in names.items(): # 同时遍历key和valueprint(key, val)
判断一个对象是否是可迭代对象:collections 模块的 Iterable 类型 ```python from collections import Iterable
l = [] b = isinstance(l , Iterable) # 判断 l 是否是可迭代对象
在遍历时可以进行解包操作:```pythonif __name__ == '__main__':names = [(2, 3, 4), (1, 2, 3)]for x, y, z in names:print(x, y, z)# 输出2 3 41 2 3
列表生成器
列表生成器,List Comprehensions,是 python 内置的非常简单却强大的可以用来创建 list 的生成器
>>> list(range(1,11,2))[1, 3, 5, 7, 9]>>> [x * x for x in range(1,11,2)][1, 9, 25, 49, 81]# 对for循环中生成 x 的只进行判断:if在for语句后面,属于筛选条件,所以不可以加 else>>> [x * x for x in range(1,11,2) if x % 3 == 0][9, 81]# for循环前面是一个表达式,属于根据 x 计算出一个结果,所以必须加 else 语句>>> [x * x if x % 2 == 0 else 2 * x for x in range(20) if x > 10][22, 144, 26, 196, 30, 256, 34, 324, 38]# 解释:for x in range(20) if x > 10 先是获得一个range(20)的序列,然后筛选其中大于10的# x * x if x % 2 == 0 else 2 * x 从后面获得的序列中如果为偶数,则为x的平方;否则为2x
