切片
1. 通过下标的方式来获取某一个数据元素,或者通过下标范围来获取某一组元素,这种方式叫做切片
2. 字符串,列表和元组都有切片操作,切片操作得到的是原始数据的一个子集,和原数据是相同的类型,不同的对象
3. 切片操作基本表达式
object[start_index:end_index:step]
4. step省略时默认为1,start_index表示起始索引(包含),end_index表示终止索引(不包含),step正负号决定切取方向
# 切片示例
>>> str = "123456"
>>> str[:-2]
"1234"
列表生成式
1. 用中括号表示,将会一次性生成一个列表,如果整个列表很大会对内存造成很大的压力
2. 列表生成式的基本表达式
[expression1 for iter_var in iterable if expression2]
# 列表生成式示例
>>> list = [2*n + 1 for n in range(3, 6)]
[7, 9, 11]
生成器
1. 生成器函数被调用后,其函数体内的代码并不会立即执行,而是返回一个生成器
2. 在迭代时,每次迭代只会产生一个对象,节约了内存空间
1) 使用yield创建生成器
# 第一次执行fab()的时候prev=0,curr=1
# 第二次执行fab()的时候prev=1,curr=1
# 第三次执行fab()的时候prev=1,curr=2
def fab():
prev, curr = 0, 1
while True:
yield prev
# 元组的赋值过程是从左往右,所以先是curr = prev + curr,然后是prev = curr
prev, curr = curr, prev + curr
2) 使用小括号创建一个生成器
(expression1 for iter_var in iterable if expression2)
>>> generator = (2*n + 1 for n in range(3, 6))
(7, 9, 11)