一.推导式
1.定义:
- 推导式分为 列表推导式、字典推导式、集合推导式等。
- 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表
2.用法:
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
# 打印1-10的列表
list = [i for i in range(1, 11)]
print(list)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 筛选出1-10之间(包括边界)的偶数
list1 = [i for i in range(1, 11) if i % 2 == 0]
print(list1)
# [2, 4, 6, 8, 10]
二.生成器
1.定义:
通过列表推导式我们可以直接创建出一个列表,但是受到内存的限制,我们不可能创造出一个无限大的列表。而且创建一个有200万个元素的列表,会占用很大的内存空间,而这个时候我们仅仅需要访问列表中几个元素,那么后面的元素就占用着空间就是一种浪费的行为。那么我们可不可以用几个元素就创建出几个元素。这样在一定程度上就优化了内存。那么在Python中有一种一边循环一边计算的机制就是生成器
2.用法
- 通过列表推导式的方式
g = (x for x in range(1, 11))
print(g)
# <generator object <genexpr> at 0x000001D016303BA0>
g所存放的是容器的地址,如果想要取出来的话,则应使用方法:next
g = (x for x in range(1, 11))
print(next(g))
print(next(g))
print(next(g))
# 1
# 2
# 3
[注意]每次只读取一个数据,并且读取完毕之后该数据就会消失。
g = (x for x in range(1, 11))
print([i for i in g]) # 第一次读取容器中的数据,并放在新列表里
print([i for i in g]) # 第二次读取容器中的数据,并放在新列表里
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# [] # 第二次读取时,容器中已经不存在数据了
- 通过函数的方式
# yield:与return不同的是,在迭代一次遇到yield时就返回yield后面(右边)的值而且在下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)开始执行。
def fun():
s = 0
while True:
s += 1
yield s
sum_d = fun()
print(sum_d)
print(next(sum_d))
print(next(sum_d))
print(next(sum_d))
# <generator object fun at 0x0000025EA17E3BA0>
# 1
# 2
# 3
三.迭代器
1.定义:
- 迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,指导所有元素被访问完结束。
- 可以被next()函数调用并不断返回下一个值的对象称为迭代器Iterator
- 生成器是可迭代的,也是迭代器
- 列表是可迭代的,但不是迭代器
- 通过iter()函数可以将可迭代的变成一个迭代器
2.用法:
- 将列表变成迭代器
list = [i for i in range(1, 11)]
iterator = iter(list) # 用iter将列表变成迭代器
print(iterator) # 打印出迭代器的地址
print(next(iterator)) # 取出数据
print(next(iterator))
print(next(iterator))