推导式
- 推导式分为 列表推导式、字典推导式、集合推导式等。在这里我们主要说其中一种也是用的最多列表推导式
- 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表简单理解就是由一个旧的列表来构建出一个新的列表
- 语法
表达式 for 变量 in 旧列表
表达式 for 变量 in 旧列表 if 条件 - 示例
#找出长度大于3的人名
list1 = ['jack','rose','anna','li']
def fun(list1):
new_list = []
for i in list1:
if len(i) > 3:
new_list.append(i)
return new_list
print(fun(list1))
list2 =[i+'过年好' for i in list1 if len(i) > 3]
print(list2)
#求1-100之间能被3整除的数
print([i for i in range(1,101) if i % 3 == 0])
#求1-100之间能既被3整除又能被6整除的数
print([i for i in range(1,100) if i % 3 == 0 and i % 6 == 0])
- 运行结果
生成器
- 背景
通过列表推导式我们可以直接创建出一个列表,但是受到内存的限制,我们不可能创造出一个无限大的列表。而且创建一个有200万个元素的列表,会占用很大的内存空间,而这个时候我们仅仅需要访问列表中几个元素,那么后面的元素就占用着空间就是一种浪费的行为。那么我们可不可以用几个元素就创建出几个元素。这样在一定程度上就优化了内存。那么在Python中有一种一边循环一边计算的机制就是生成器 - 创建生成器的方式
1、通过列表推导式的方式
#通过列表推导式的方式创建生成器
generator1 =(x * 3 for x in range(1,11))
print(generator1,type(generator1))
print(generator1.__next__())
print(generator1.__next__())
print(generator1.__next__())
print(next(generator1))
2、通过函数的方式
#通过函数的方式创建生成器
def fun():
i = 0
while True:
i += 1
yield i
r = fun()
print(next(r))
print(next(r))
只要在函数中出现yield关键字它就是一个生成器函数
3、 生成器特性
#通过函数的方式创建生成器
#生成器的特性:一旦数据取完了,数据就不存在了
def fun():
for i in range(10):
yield i
r = fun()
list1 = [i for i in r]
list2 = [i for i in r]
print(list1)
print(list2)
迭代器
迭代器是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束。
可以被next()函数 调用并不断返回下一个值的对象称为迭代器Iterator
生成器是可迭代的,也是迭代器
列表是可迭代的,但不是迭代器
通过iter()函数可以将可迭代的变成一个迭代器
# 可迭代对象实现线了__iter__()方法的对象, 而迭代器则是实现了__iter__()和__next__()方法
list1=[1,2,3,4,5]
iterator1 = iter(list1)
print(iterator1,type(iterator1))
# list2 = [i for i in iterator1]
# list3 = [i for i in iterator1]
# print(list2)
# print(list3)
print(iterator1.__next__())
print(next(iterator1))