列表推导式
# 列表推导式.py
"""
语法
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]
"""
# 求1--100之间能被3整除的数
list1 = [i * 2 for i in range(1, 100) if i % 3 == 0]
list2 = [i for i in range(1, 100) if (i % 3 == 0 and i % 5 == 0)]
print(list1)
print(list2)
生成器
生成器有两种创建方法
- 方法一:类似于列表推导式
- 方法二:通过函数来构造生成器(优先使用函数这一种,更加灵活,可控性更强一些)
# 02生成器.py
# 需求:取1--100000000之间所有整除3的数
# 数据太庞大了,有负荷
# list1 = [i for i in range(1, 100000000) if i % 3 == 0]
# 生成器有两种创建方法
"""方法一:类似于列表推导式"""
list2 = [i for i in range(1, 10) if i % 3 == 0]
print(list2)
gen = (i for i in range(10, 100) if i % 3 == 0)
# 输出id
print(gen)
# 一个一个输出
# print(gen.__next__())
# print(gen.__next__())
# print(gen.__next__())
# print(gen.__next__()) # 超过迭代次数就会停止迭代并报错
print(next(gen)) # 函数的调用
print(next(gen))
print(next(gen))
"""方法二:通过函数来构造生成器"""
def fun():
i = 0
while True:
i += 1
"""一旦使用了yield,fun就是生成器了"""
yield i
r = fun()
print(r)
print(next(r))
print(next(r))
迭代器
生成器比迭代器更优
list1 = [1, 2, 3, 4, 5]
itr = iter(list1)
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
__iter __ 返回自己
__ next __ 下一个,拿到下一个
# __iter__返回自己
# __next__下一个,拿到下一个