列表生成式/生成器/迭代器

列表生成式/生成器/迭代器

一.列表生成式

用来创建列表的表达式

示例:

import os
print([x for x in range(20) if x % 2 == 0])
print([d for d in os.listdir('.') if not d.startswith('.') and not d.startswith('__')])

# 字典
print([k + '=' + str(v) for k,v in {'a' : 1, 'b' : 2}.items()]) #items可以同时迭代key和value

 

{k:v for k,v in self.items() if not k.startswith('_')}

  

二.生成器

如果一个列表非常大,那么创建这个列表需要耗费较大的内存.生成器不会创建完整列表,只会在调用的时候计算出合适的值返回给调用方.

1.创建生成器有两种方式:

(1).将列表生成式的[]改为括号:

(x for x in range(20) if x % 2 == 0)

  

(2).一个函数定义中包含yield关键字:

def get():
    for x in range(10):
        yield x

  

2.使用生成器:

(1).通过调用next来获得值,但需要注意StopIteration异常(不常用)

a = get_generator()
print(next(a))

  

(2).通过迭代(常用):

for ge in get_generator():
    print(ge)

  

三.迭代器:

可以被next()函数调用并不断返回下一个值的对象称为迭代器

1.能被迭代的数据有两类

一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。

2.能被迭代的对象称为:Iterable,可以用isinstance判断一个对象是否可以迭代

3.生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator,把list、dict、str等Iterable变成Iterator可以使用iter()函数

如:

from collections.abc import Iterator
str_a = 'hello world'
print(isinstance(str_a, Iterator))
print(isinstance(iter(str_a), Iterator))

  

输出:
False
True

4.总结:

凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,可以通过iter()函数获得一个Iterator对象。

 

转载于:https://www.cnblogs.com/itfenqing/p/10253439.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101182.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql中TIMESTAMPDIFF简单记录

    mysql中TIMESTAMPDIFF简单记录1.  SyntaxTIMESTAMPDIFF(unit,begin,end);根据单位返回时间差,对于传入的begin和end不需要相同的数据结构,可以存在一个为Date一个DateTime2.Unit支持的单位有MICROSECOND SECOND 秒MINUTE 分钟HOUR  小时DAY  天WEEK 星期MONTH 月QUARTER 季度YEAR 年3.Examp…

    2022年5月22日
    30
  • WPF 教程(wpf架构)

    WPF介绍了一个非常方便的概念:把数据储存为一种资源,无论是本地控件、本地窗口还是全局应用。数据可以是任何你想要的东西,从实际的信息到WPF控件的层次结构都行。这非常有用,你可以把数据放在一个地方,然后在其他地方调用它。这个概念被广泛用在样式和模版,我们后面会详细讲到。也可以用在很多别的地方,就像本章要说明的地方,例子如下:

    2022年4月16日
    50
  • 轨迹跟踪求解Fmincon函数(2)「建议收藏」

    轨迹跟踪求解Fmincon函数(2)「建议收藏」1.Fmincon函数介绍在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrainednonlinearmultivariablefunction)的最小值,即可以用来求解非线性规划问题matlab中,非线性规划模型的写法如下2.基本语法[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x的返回值是决策向量x的取值,fval的返回值是目标函数在x处的f(x)的取值。fun是用.

    2022年5月3日
    32
  • Idea激活码最新教程2021.1.2版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2021.1.2版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2021 1 2 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2021 1 2 成功激活

    2025年5月22日
    5
  • laravel 微信公众号的Token无效解决的方案[通俗易懂]

    laravel 微信公众号的Token无效解决的方案[通俗易懂]laravel代码的编写<?phpnamespaceApp\Http\Controllers\Admin\Official;useIlluminate\Http\Request;useApp\Http\Controllers\Controller;useIlluminate\Support\Facades\DB;define(‘TOKEN’,’yunlive11′);classWxresponseMsgextendsController{ protecte.

    2025年11月6日
    4
  • Linux系统安装Python3环境(超详细)

    Linux系统安装Python3环境(超详细)本文基于如下Linux系统版本:1、默认情况下,Linux会自带安装Python,可以运行python–version命令查看,如图:我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(Ctrl+D退出python命令窗口)。2、查看Linux默认安装的Python位置看到/usr/bin/python…

    2022年5月26日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号