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

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

一.列表生成式

用来创建列表的表达式

示例:

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)
上一篇 2021年6月21日 上午8:00
下一篇 2021年6月21日 上午9:00


相关推荐

  • 多元有序logistic回归分析_SPSS:二元Logistic回归中自变量的处理和解读——有序多分类变量的处理…

    多元有序logistic回归分析_SPSS:二元Logistic回归中自变量的处理和解读——有序多分类变量的处理…SPSS 二元 Logistic 回归中自变量的处理和解读 有序多分类变量的处理 有序多分类变量是很常见的变量形式 通常在变量中有多个可能会出现的取值 各取值之间还存在等级关系 比如高血压分级 0 正常 1 正常高值 2 1 级高血压 3 2 级高血压 4 3 级高血压 尿蛋白水平 0 1 2 3 4 等等 与无序多分类变量不同 有序多分类变量的各个选项直接呈现向一个方向递增或

    2025年10月9日
    6
  • n8n实现每天将热点新闻定点发送到电报群聊

    n8n实现每天将热点新闻定点发送到电报群聊

    2026年3月15日
    2
  • apache功能配置

    apache功能配置

    2021年9月8日
    56
  • java 成绩管理系统 报告_Java学生成绩管理系统实验报告

    java 成绩管理系统 报告_Java学生成绩管理系统实验报告实验名称实验类型实验编号学生成绩管理系统□验证实验学时√综合1分组号指导教师8+101实验日期实验时间实验地点6A-413一、实验目的和要求(1)掌握java的基本数据类型;掌握数组的定义和使用;(2)掌握java语言中的控制结构的使用;(3)掌握java语言中的类的定义与使用;(4)掌握java语言中继承、多态、接口、抽象类、异常处理等;…

    2022年7月15日
    15
  • java中什么是继承,和继承的接口的关系?

    java中什么是继承,和继承的接口的关系?继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。面试题:一个接口可以继承多个接口.interfaceCextendsA,B{}是可以的.一个类可以实现多个接口:classDimplementsA…

    2022年7月7日
    29
  • 2021前端高级面试题_2021前端面试题目100及最佳答案

    2021前端高级面试题_2021前端面试题目100及最佳答案一、简单页面1、CSS选择器样式优先级2、CSS实现三列布局(左右固定宽度,中间自适应)(1)CSS浮动第一个float:left,第二个float:right,第三个设置margin-left和margin-right(2)绝对定位法第一个定位到left,第二个定位到right,第三个设置margin-left和margin-right(3)flex布局.left{width:200px;或者flex:00200px;}.right{width:200px;

    2022年8月29日
    6

发表回复

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

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