python 列表生成器_python 学习笔记-列表生成器

通过列表生成式我们可以方便的生成列表。但是在有的时候,我们需要生成的列表非常长,而我们的计算机的内存是有限的。在操作列表的时候,我们往往只是操作了列表的一部分区域的数据。

例如我们需要生成这么一个列表,列表中除了第1个和第2个数字外,其余数字都是前两个数之和。

1,2,3,5,8,13...

如果这个数组只有几千个或者几万个数字的时候,我们或许还能将它们都生成存在内存中。但是我们如果需要连续计算几千万个数字的时候,我再按上面的思路来就不大现实了。

认真思考一下上面的数列,我们在遍历的时候,其实只要知道前两个数字的数值,我们就能源源不断地计算出下一个数值是多少。

Python其实已经给我们提供了现有的工具让我们生成数列。与之前的生成式不同,生成器(Generators)在定义的时候并不是直接在内存中生成数列,而是定义一个生成数列的算法。

定义列表生成器有两种方式,一种是算式列表生成器(我起的名字),一种通过yield关键词。

算式列表生成器

算式列表生成器雨列表生成式类似,但[]需要换成()。

my_gernerator = (x*x for x in range(1,101))

generator object的迭代方式

1. next()函数

我们可以调用generator object的next()函数让指针下移。例如

print my_generator.next() #输出 1

print my_generator.next() #输出 4

print my_generator.next() #输出 9

每调用一次next(),计算出一个值,并记忆迭代到何处了。当迭代到最后一个元素后再调用next(),python则会抛出StopIteration错误。我们可以捕获这个错误来处理迭代终止。

next()这种手动调用的运用较少。

2. 用for循环

我们可以利用collections.Iterable来判断generator object是否是一个Iterable对象。

from collections import Iterable

g = (x**3 for x in range(1,101))

print isinstance(g, Iterable) #输出True

因此我们可以用for迭代generator object。

for item in g:

print item

包含yield的函数定义列表生成器

在定义一个比较复杂的列表生成器的时候,上述算式型的列表生成器已经不能满足我们的需求了。我们可以用一个包含yield关键字的函数来定义一个列表生成器。

例如我们来实现一下文章开头生成一个“每个数字都是前两个数字之和”的数列。

def fibonacci(max):

n,a,b = 0,1,2

while n

yield b #-----> Generator迭代到该处时,即产生一个数。并暂停在此处,等待下一次迭代,又从该处开始,又直到遇到下一个yield..不断反复,直到程序结束。

a,b = b,a+b

n = n+1

此时,fibonacci不再是一个普通函数,而是一个generator object。

我们通常用for循环来迭代generator对象。

for n in fibonacci(10):

print n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值