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

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

一.列表生成式

用来创建列表的表达式

示例:

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机病毒相关参考文献,计算机病毒参考文献[通俗易懂]

    计算机病毒相关参考文献,计算机病毒参考文献[通俗易懂]此栏目涵盖与参考文献和计算机和病毒相关的例文,免费为你研究计算机病毒文献综述提供有关参考资料。关键词:网络参考文献;选择;引用;规范化摘要:随着网络环境及网络信息资源的不断建设和发展,学术研究中以网络文献作为引文已成为一种势不可挡的发展。摘要:当今社会,随着互联网技术的高速发展,人们的物质文化生活也随之取得了较大的丰富。然而,在面对互联网高速发展今天,整个互联网也面临着各种病毒的。摘要:如今科学技…

    2022年5月3日
    40
  • Android sdk_安卓sdk工具下载

    Android sdk_安卓sdk工具下载1在官网上获得软件压缩包imx-android-10.0.0_2.5.0.tar.gz下载地址2获取源码拷贝imx-android-10.0.0_2.5.0.tar.gz到一个文件夹里并解压,进入:2.1获取repogitclonehttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo修改repo里的内容为下面REPO_URL=’https://mirrors.bfsu.edu.cn/git/git-repo’然后添

    2022年8月30日
    0
  • java scanner next nextline nextint区别

    java scanner next nextline nextint区别next表示返回第一个字符串而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。简单的说nextLine() 返回的是一行。而next() 返回的只是第一个输入。 比如;输入hello java nextLine() 读的是hello java next() 读的是hello

    2022年5月17日
    36
  • 自然语言处理中的Attention机制总结[通俗易懂]

    自然语言处理中的Attention机制总结[通俗易懂]    在面试的过程中被问到了attention,原来虽然其实已经实际用过attention了,也知道个大概原理是加权求和,但是对于加权的具体方法以及权值得分的计算并不是很清晰,面试答的一般,正好最近实习的地方

    2022年7月24日
    5
  • pycharm设置字体颜色_pycharm界面颜色设置

    pycharm设置字体颜色_pycharm界面颜色设置 File–>Settings–>Editor–>ColorScheme–>LanguageDefaults–>Comments–>Linecomment–>再选取自己想要的颜色即可  

    2022年8月28日
    2
  • phpstorm2021.11 激活【2021免费激活】「建议收藏」

    (phpstorm2021.11 激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0E14HXZ4QL-eyJsaWN…

    2022年3月29日
    86

发表回复

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

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