首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python列表生成器

本篇将介绍python生成器 前言 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。...而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅访问前面几个元素,那后面绝大多数占用的空间都白白浪费了。...生成器创建方式 第一种: 在前面我们介绍python列表生成式,这里我们只需要把列表生成式的[]改成(),就创建了一个generatro >>>L = [x * x for x in range(10)...#生成器是可迭代对象吗?...如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现 斐波那契数列生成器 def creatNum(): print("---开始执行生成器方法---")

70210
您找到你想要的搜索结果了吗?
是的
没有找到

Python 列表推导和生成器

Python 会忽略代码里 []、{} 和 () 中的换行,因此如果你的代码里 有多行的列表列表推导、生成器表达式、字典这一类的,可以省 略不太好看的续行符 \。...列表推导不会再有变量泄漏的问题,列表推导、生成器表达式,以及同它们很相似的集合(set)推导 和字典(dict)推导,在Python3 中都有了自己的局部作用域,就像函数似的。...len(cards) 56 生成器表达式 虽然也可以用列表推导来初始化元组、数组或其他序列类型,但是生成 器表达式是更好的选择。...这是因为生成器表达式背后遵守了迭代器协 议,可以逐个地产出元素,而不是先建立一个完整的列表,然后再把这 个列表传递到某个构造函数里。前面那种方式显然能够节省内存。...生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。

41120

列表生成式,迭代器和生成器

一、列表生成式 现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],现在要求把列表里的每个值加1,你怎么实现?...1 a = [i + 1 for i in a] print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 最后一种写法就叫做列表生成式 二、生成器 通过列表生成式,我们可以直接创建一个列表...但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。...在Python中,这种一边循环一边计算的机制,称为生成器(generator)。 要创建一个生成器,有多种方法。...第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个生成器: >>> l = [x * x for x in range(10)] >>> l [0, 1, 4, 9, 16, 25, 36

53310

python迭代器、生成器列表推倒式

:(yield()) 使用了 yield()的函数被称为生成器(generator) 生成器是一个返回迭代器的函数,只用于迭代操作 在某种情况下,我们需要节省内存,就只能自己写,我们自己写的能实现迭代器的东西...称之为:“生成器” 本质:迭代器:(自带了__iter__方法和__next__方法,不需要我们去实现) 特点:惰性运算,开发者自定义 列表推倒式: 1- 把列表(list)解析的 [] 换成 ()得到的就是生成器表达式...2- 列表解析与生成器表达式都是一种便利编程方式,只不过生成器表达式更节省内存 3- python 不但使用迭代器协议,让 for 循环变得更加通用。...sum ( x** 2 for x in range(4) ) 而不用多此一举得先构造一个列表: sum ( [x**2 for x in range(4)] ) 小结: 可迭代对象: ·拥有__iter...# 列表解析 sum ([i for i in range(100000000)])#内存占用大,机器容易卡死 # 生成器表达式 sum (i for i in range(100000000)])#几乎不占用内存

49410

Python 迭代器、生成器列表解析

比如,它不适用于一个无限的生成器列表解析和生成器表达式 列表解析 列表解析( List comprehensions, 或缩略为 list comps ) 来自函数式编程语言 Haskell ....生成器表达式是列表解析的一个扩展。...列表解析的一个不足就是必要生成所有的数据, 用以创建整个列表。这可能对有大量数据的迭代器有负面效应。生成器表达式通过结合列表解析和生成器解决了这个问题。...生成器表达式在 Python 2.4 被引入, 它与列表解析非常相似,而且它们的基本语法基本相同; 不过它并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”...sum() 函数的参数不仅可以是列表,还可以是可迭代对象,比如生成器表达式。

63420

2018年8月23日python中列表的高级操作:列表推导式,列表生成器列表迭代器

: 4.当列表中存储大量数据的时候,会严重地消耗解释器的内存,所以为了节省解释器 内存,出现了列表生成器,当有大量无规则的数据的时候不要存储在列表中,当有大量 有规则的数据需要存储在列表中的时候可以使用列表生成器...,首先看一下列表生成器列表推导式的区别: 列表推导式: my_list = [x for x in range(0, 100)]                 print(my_list)...,而列表生成器是创建了一个生成器对象, 对象中包含了生成需要的数据的算法,当需要数据的时候触发算法才生成数据,而不是直接把 所有的数据一下子创建完,生成器对象中存储的只是一个产生数据的算法 如何使用生成器中的数据...__next__()) #3 列表生成器是用来产生列表内的数据的,迭代器是用来判断一个对象是否可以被for循环遍历 所以列表生成器和迭代器是没有关系的!...列表生成器只能用在列表中,迭代器可以判断很多 类型的数据。

1.4K30

python高级特性:切片迭代列表生成式生成器

yjmyzz.cnblogs.com/ dict字典迭代3: key: name ,value: 菩提树下的杨过 key: blog ,value: http://yjmyzz.cnblogs.com/ 三、列表生成器...四、生成器(generator) 这是python引入的一个新概念,想想刚才学到的列表生成器: result1 = [x ** 2 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9...(比如:1千万个),最终列表生成器肯定运行很慢,会严重影响性能。...这就是生成器(generator)要解决的问题,它与[列表生成器]的区别在于,它只保存计算逻辑(即: 保存算法),并不马上计算结果,真正要用的时候,调用next(g)取出下一个计算结果即可,当然,它也支持迭代...单纯从语法上看,只要把"列表生成器"的[],换成()即可。

53830

python的列表推导式和生成器表达式对比

概述 Python中的列表推倒式(List Comprehension) 和 生成器表达式(Generator Expression)是两种很相似的表达式,但含义却不大不同,这里做一个对比。...列表推导式 列表推导式是比较常用的技术,能将本来需要for loop和if else语句的情况简化成一条指令,最终得到一个列表对象: even = [e for e in range(10) if e...生成器表达式 生成器能表达式解决上面的问题,它的元素迭代是惰性的,因此只有需要的时候才生产出来,避免了额外的内存开销和时间开销: 生成器表达式不管元素数目多大,创建时都是常数时间,因为它并没有立即创建元素...那么生成器表达式的语法是怎么样的呢,很简单,只需要把列表推导式中的方括号改为圆括号: even_gen = (e for e in range(10) if e % 2 == 0) 注意它的类型是生成器类型...使用场景选择 那么是不是就是说使用中可以用生成器表达式替代列表推导式了呢,也不尽然,因为列表推导式得到的是一个列表,很多便捷操作(如slice等)可以作用到上面,而生成器表达式则不行: In [17]:

14520

python 列表表达式和生成器表达式

参考链接: Python | 生成器表达式 列表表达式:  >>> a=[1,2,2,3,50]  >>> b=[i+1 for i in a]  >>> print(b)  [2, 3, 3, 4,...51]  >>> b=[i+1 for i in a if i>=5]  >>> print(b)  [51]  列表表达式返回一个完整的列表  生成器表达式:  >>> c=(i+2 for i in...)  >>> print(c)   at 0x01612030>  >>> print(list(c))  [3, 4, 4, 5, 52]  生成器表达式和列表表达式的形式上并无多大差别但是执行方式上却有很大的差别...,生成器表达式返回的是一个iterator 每次只返回处理单个元素,而列表表达式返回的是整个的列表,如果列表的长度很大大到占满内存的程度,那么改用生成器是有很明显的好处的  在生成器中嵌套使用:  >>

66340

Python骚操作从列表推导和生成器表达式开始

一般接触到生成器时,都要讲yield关键字,看似有点复杂,然而却很简单,生成器就像列表推导一样,只不过是用来生成其他类型序列的,比如元组: symbols = "abc" codes = (symbol...因为生成器表达式在每次迭代时才会逐个产出元素,所以这里的结果并不是已经创建好的元组。列表推导才会一次性产生新列表所有元素。...) ('white', 'M') ('black', 'L') ('white', 'L') 生成器表达式可以提升程序性能,比如要计算两个各有1000个元素的列表的笛卡尔积,生成器表达式可以帮忙省掉运行...生成器表达式用于生成列表外的其他类型的序列,它跟列表推导的区别仅仅在于方括号换成圆括号,如b = tuple(x for x in something) 。...小结 本文首先介绍了序列的概念,然后演示了Python常规骚操作——列表推导,最后引出了生成器表达式这个看似复杂实则简单的语法。列表是可变的,它有个不可变的孪生兄弟,元组。

48740

python3--列表推导式,生成器表达式,内置函数

生成器表达式 1,把列表解析的[]换成()得到的就是生成器表达式 2,列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存 3,python不但使用迭代器协议,让for循环变得更加通用...,大部分内置函数,也是使用迭代器协议访问对象的,例如sum函数是python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和 求1到3的x的2次方的和...print(sum(x ** 2 for x in range(4))) 执行结果14 各种推导式玩法 推导式套路 之前已经学习了最简单的列表推导式和生成器表达式,但是除此之外,其实还有字典推导式,集合推导式等等...:带参数时,返回参数的属性,方法列表。...迭代器生成器相关 range:函数可以创建一个整数对象,一般用在for循环中 next:内部实际使用了__next__方法,返回迭代器的下一个项目 it = iter([1,2,3,4,5]) #循环

2.4K00

Python学习(四)---- 列表生成式、生成器、迭代器和内置函数

今天一起学习列表生成式、生成器、迭代器和内置函数相关内容。 1....因此,列表生成式也可以使用两个变量来生成list: ? 把一个list中所有的字符串变成小写: ? 最后列表生成器结合函数。 ? ---- 2. 生成器 通过列表生成式,可以创建一个列表。...在Python中,这种一边循环一边计算的机制,称为生成器:generator。 2.1 把一个列表生成式的[]改成() 要创建一个generator,有很多种方法。...生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。...)函数的对象都是Iterator类型,它们表示一个惰性计算的序列; 所以生成器一定是迭代器。

1.1K30

三元表达式、列表推导式、字典生成式、生成器、递归

目录 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式 列表推到式 字典生成式 zip()方法 描述 语法 返回值 生成器 生成器 递归 迭代器 可迭代对象 可迭代对象:可迭代的对象,内置有...如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。...g = (i for i in range(10))#生成器表达式 print(g) for i in g: print(i) #列表推导式相当于直接给你一筐蛋,而生成器表达式相当于给你一只老母鸡...5 6 7 8 9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 把列表推导式的[]换成()就是生成器表达式 优点:省内存,一次只产生一个值在内存中 生成器 含有yield关键字的函数叫做生成器...把列表推导式的[]换成()就是生成器表达式 优点:省内存,一次只产生一个值在内存中 关于为啥节省内存参考下面链接,个人认为,生成器利用迭代关系取值,每次只有一个值进入内存,所以节省内存空间,

37410

python生成器详解_Python 生成器

我们可以直接打印出列表L的每一个元素,而对于生成器G,我们可以按照迭代器的使用方法来使用,即可以通过next()函数、for循环、list()等方法使用。...:{e.value}") break value:0 value:1 value:1 value:2 value:3 生成器返回值:完成 生成器列表的对比 # 列表的内存开销和运行时间 start_time...cost_time1}") print(f"内存开销为{sys.getsizeof(g)}字节") 结果 创建列表的时间:0.00024577200000000174 内存开销为43048字节 创建列表的时间...:2.2140000000003823e-06 内存开销为128字节 通过结果,我们可以明显的看出,生成器的内存开销和运行速度要明显比列表的要更节省内存,运行速度更快 生成器的运用场景 如果有一个包含...100w个元素的列表,但是我们仅仅只想访问前3个,那么后面的列表元素占用的内存空间都是浪费的,这个时候我们没必要创建完成的list,可以使用生成器,从而可以节省大量内存空间 总结 使用了yield关键字的函数不再是函数

1.1K30

列表:创建列表

列表是Tcl语言中最重要的一种数据结构。什么是列表列表是元素的有序集合,各个元素可以包含任何字符串,例如空格,反斜杠,换行符等。...01 直接利用花括号{}创建 如图1所示,通过花括号的方式创建列表赋给变量a,列表长度为3(可通过llength查询列表长度,后续会介绍) ?...创建与图1相同的列表,采用list命令如图2所示。 ? 03 通过concat命令创建列表 concat的参数可以是任意多个列表,从而实现列表的拼接。...如图3所示,利用concat命令将图1的列表a与图2的列表b拼接为新的列表赋给c。图4显示了concat拼接3个列表,其中第一个列表是空列表。 ? ?...05 创建空列表 所谓空列表是指该列表是存在的,但不包含任何值。通常创建空列表用于列表初始化。可通过{}直接创建空列表,也可通过list命令创建空列表。 ?

2.2K30
领券