高级编程

本文深入探讨Python中的列表推导式、生成器和迭代器。列表推导式提供了一种简洁创建列表的方法,如筛选长度大于3的人名。生成器则在内存有限的情况下,通过按需生成元素优化内存使用,例如通过函数或列表推导式创建。迭代器是一种访问集合元素的方式,它可以记住遍历位置。文章通过实例展示了如何创建和使用这些概念,并强调了它们在内存管理和高效编程中的作用。
摘要由CSDN通过智能技术生成

推导式

  • 推导式分为 列表推导式、字典推导式、集合推导式等。在这里我们主要说其中一种也是用的最多列表推导式
  • 列表推导式是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))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值