python 生成器 迭代器中怎样查看迭代了多少次

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 287, 距离下一级还需 213 积分
论坛徽章:0
列表是可以迭代的,“迭代”是一个什么概念呀?
书上讲列表时,反复说到迭代,但是没具体讲什么是“迭代”
所以问问大家,什么是“迭代”
字面上讲,我一直认为迭代就是递归,
但是递归与列表风马牛不相及呀,所以对列表而言,迭代一定不是递归,
那我就更不明白,迭代是什么意思了
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
丰衣足食, 积分 714, 距离下一级还需 286 积分
论坛徽章:0
本帖最后由 broader 于
12:10 编辑
列表是可以迭代的,“迭代”是一个什么概念呀?
书上讲列表时,反复说到迭代,但是没具体讲什么是“迭代” ...
go_hao 发表于
一家之谈,供你参考。
首先,看一下英文对应词汇
“迭代”-》&iteration&-&(computer science) a single execution of a set of instructions tha &the solution took hundreds of iterations&
“递归”-》“recurse&-&To execute a procedure recursively
现在谈一下对于这两个词汇的理解:
&迭代“, 指重复执行一个指令,用在python的list里,是指对重复调用list对象,将调用list对象返回的数据作为参数传给一个函数并由返回的结果组成一个新的list;
“递归”,指一个函数执行过程中调用了自己,是对一种计算方法的描述,对于python的list的调用显然用“递归”这个词汇不合适。
从字面上理解,“迭代”和“递归”也是不同的概念,“迭代”是重复某一过程,“递归”是调用自身,即“迭代”是循环操作,“递归”是嵌套操作。
丰衣足食, 积分 605, 距离下一级还需 395 积分
论坛徽章:0
就是说存在不重复的遍历其内部每一个子项的方法。。。
家境小康, 积分 1083, 距离下一级还需 917 积分
论坛徽章:0
就是遍历。
白手起家, 积分 154, 距离下一级还需 46 积分
论坛徽章:0
前面几位描述的功能我都在用,但是这个功能到底叫什么……以及这俩词汇的含义……
面试要是被问到这俩词,我肯定交白卷
丰衣足食, 积分 714, 距离下一级还需 286 积分
论坛徽章:0
前面几位描述的功能我都在用,但是这个功能到底叫什么……以及这俩词汇的含义……
面试要是被问到这 ...
gcd0318 发表于
面试时,你可以在白板或纸上写一段代码作为这两个“词汇”的示例来说明,效果一样。
白手起家, 积分 154, 距离下一级还需 46 积分
论坛徽章:0
就怕人家问我:迭代是什么……
然后我解释了半天,人家又说:你解释的这个,我们叫做递归……
稍有积蓄, 积分 287, 距离下一级还需 213 积分
论坛徽章:0
我明白了,凡是内部可以有 .next()这个方法的,就是可迭代的。
即可以自动取下一个,
没有next()方法的,就是不可迭代的,
我自已的理解,不知对不对?
丰衣足食, 积分 605, 距离下一级还需 395 积分
论坛徽章:0
本帖最后由 Kabie 于
16:41 编辑
不够准确……
__iter__()或者__next__()或者__getitem__() 方法
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处> Python迭代
python学习笔记:生成器和迭代器的区别,递归就是自己调用自己,生活中的两面镜子互照。
python迭代器和生成器:1
迭代器:迭代器是什么?迭代器越界时抛出StopIteration异常。
python特性(二):迭代器与for语句,网上许多文章说Python的for语句中,in关键字后面的对象
异常,8 1 基本操作,抛出异常,raise Exception(
) 结果Traceback (most recent call last):
目录列表生成式生成器迭代器内置函数一、列表生成式列表生成式即List Comprehensions,是Pytho
Python 文件迭代器(2)
本人新手一枚,所编写的代码基本尽量没调用库类,所以感觉代码会很臃肿,连三级代码都
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排
Python 列表有内置就地排序的方法 list sort(),此外还有一个内置的 sorted() 函数将一个可迭代
可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、
我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,
最近因为课程需要开始深入了解Python语言。因为以前一直用的Java、C& 43;& 43;
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,
在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对
python图像主色调(主颜色)提取,在hsv空间k均值迭代实现:一、识别主色调步骤;二、代
  python中的map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其
你也可以自己实现一个迭代器,如上所述,只需要在类的__iter__方法中返回一个对象,这个
! usr bin python
-*- coding: utf-8 -*-
& 39;& 39;& 39;
Created on
@author: beyondzhou
! usr bin python
-*- coding: utf-8 -*-
& 39;& 39;& 39;
Created on
@author: beyondzhou
这一章,有点抽象,看着有点蛋疼!
双下划线__future__或单下划线有特殊含义,在Python中,
热门文章热门标签
11月04日 |
11月04日 |
11月04日 |
11月04日 |
11月04日 |
11月04日 |
11月04日 |
11月04日 |Python(9)
1.并行迭代
& &有时候,一个程序中需要我们同事在一个for循环中迭代两个以上的集合。其中一种方法就是循环其中一个集合的索引,然后根据索引对所有集合进行循环,例如:
names = ['anne','beth','george','damon']
ages = [12,45,32,102]
for i in range(len(names)):
print(names[i],'is',ages[i],'years old')
& &更方便的就是使用內建的zip函数进行并行迭代,可以把序列压在一起,然后返回一个元组的列表:
&&&zip(names,ages)
[('anne',12),('beth',45),('george',32),('damon',102)]& &现在我们可以在循环中解包元组:
for name,age in zip(names,ages):
print(name,'is',age,'year old')& &zip函数可以作用于任意多的序列,如:
for name,age,number in zip(names,ages,range(4)):
print(number,':',name,'is',age,'year old')
2.编号迭代
& & 有些时候想要迭代序列中的对象,同时还想要获取当前对象的索引。例如没在一个字符串列表中替换多有含'xxx'的子字符串。实现的方法肯定很多,例如:
for string in strings:
if 'xxx' in strings:
strings[index] = '[censored]'
index += 1& &其中一个比较方便的方法就是使用內建的·enumerate函数:
for index,string in enumerate(strings):
if 'xxx' in strings:
strings[index] = '[censored]'& &这个函数可以在提供索引的地方迭代索引-值对。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8423次
排名:千里之外
原创:45篇在函数内部,调用函数自身的编程技巧称为递归( recursion)。递归函数结构清晰,很直观的理解计算过程,但也有严重缺点:相对于普通循环而言,递归运行效率较低,经过很多冗余的计算,递归会消耗大量的调用堆栈。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧。每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,递归调用的次数过多,会导致栈溢出。因此,应该尽量用循环代替递归。
举个阶乘的例子,用函数 ca(n) 表示阶乘,ca(n) = n! = 1 * 2 * 3 * 4 * (n-1 ) * n = n * ca(n-1)
def ca(n):
if n == 1:
return n*ca(n-1)
函数的计算过程是这样的:
(4 * ca(5))
(3 * (4 * ca(5)))
(2 * (3 * (4 * ca(5))))
(1 * (2 * (3 * (4 * (5)))))
利用 for 循环来遍历一个列表(list)或元组(tuple),将值依次取出,这种方法我们称为迭代。
for x in range(10):
我们可以用 for 循环类计算阶乘:
for x in range(1,10):
&&& print m
&&& 3628800
可以用函数来更加人性化阶乘:
def factorial(x,y):
for n in (x,y+1):
print factorial(1,10)
Python还提供一个 reduce 函数,利用 lambda 匿名函数,一行代码便可以完成阶乘的计算:
print reduce(lambda x,y: x*y, range(1,11))
阅读(...) 评论()python 可迭代对象 Python中对象迭代与反迭代的技巧总结-Python教程
当前位置:&>&&>& &
Python中对象迭代与反迭代的技巧总结
python 可迭代对象 Python中对象迭代与反迭代的技巧总结
| 来源:网络 | 关键字:
一、如何实现可迭代对象和迭代器对象?实际案例某软件要求从网络抓取各个城市气味信息,并其次显示:北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ......如果一次抓取所有城市天
一、如何实现可迭代对象和迭代器对象?实际案例某软件要求从网络抓取各个城市气味信息,并其次显示:北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ......如果一次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间,我们期望以用时访问的策略,并且把所有城市气温封装到一个对象里,可用for语句进行迭代,如何解决?解决方案实现一个迭代器对象Weatherlterator,next方法每次返回一个城市气温,实现一个可迭代对象Weatherlterable,――――iter__方法返回一个迭代器对象import requests from collections import Iterable, Iterator # 气温迭代器 class WeatherIterator(Iterator): def __init__(self, cities): self.cities = cities self.index = 0 def getWeather(self, city): r = requests.get('/weather_mini?city=' + city) data = r.json()['data']['forecast'][0] return '%s:%s , %s' % (city, data['low'], data['high']) def __next__(self): if self.index == len(self.cities): raise StopIteration city = self.cities[self.index] self.index += 1 return self.getWeather(city) # 可迭代对象 class WeatherIterable(Iterable): def __init__(self, cities): self.cities = cities def __iter__(self): return WeatherIterator(self.cities) for x in WeatherIterable(['北京', '上海', '广州', '深圳']): print(x)执行结果如下:C:PythonPython35python.exe E:/python-intensive-training/s2.py 北京:低温 21℃ , 高温 30℃ 上海:低温 23℃ , 高温 26℃ 广州:低温 26℃ , 高温 34℃ 深圳:低温 27℃ , 高温 33℃ Process finished with exit code 0二、如何使用生成器函数实现可迭代对象?实际案例实现一个可迭代对象的类,它能迭代出给定范围内所有素数:python pn = PrimeNumbers(1, 30) for k in pn: print(k) `` 输出结果text2 3 5 7 11 13 17 19 23 29“`解决方案-将该类的__iter__方法实现生成器函数,每次yield返回一个素数class PrimeNumbers: def __init__(self, start, stop): self.start = start self.stop = stop def isPrimeNum(self, k): if k & 2: return False for i in range(2, k): if k % i == 0: return False return True def __iter__(self): for k in range(self.start, self.stop + 1): if self.isPrimeNum(k): yield k for x in PrimeNumbers(1, 20): print(x)运行结果C:PythonPython35python.exe E:/python-intensive-training/s3.py 2 3 5 7 11 13 17 19 Process finished with exit code 0三、如何进行反向迭代以及如何实现反向迭代?实际案例实现一个连续浮点数生成器FloatRange(和rrange类似),根据给定范围(start, stop)和步进值(step)产生一些列连续浮点数,如迭代FloatRange(3.0,4.0,0.2)可产生序列:正向:3.0 & 3.2 & 3.4 & 3.6 & 3.8 & 4.0 反向:4.0 & 3.8 & 3.6 & 3.4 & 3.2 & 3.0解决方案实现反向迭代协议的__reversed__方法,它返回一个反向迭代器class FloatRange: def __init__(self, start, stop, step=0.1): self.start = start self.stop = stop self.step = step def __iter__(self): t = self.start while t &= self.stop: yield t t += self.step def __reversed__(self): t = self.sto(.cn)p while t &= self.start: yield t t -= self.step print("正相迭代-----") for n in FloatRange(1.0, 4.0, 0.5): print(n) print("反迭代-----") for x in reversed(FloatRange(1.0, 4.0, 0.5)): print(x)输出结果C:PythonPython35python.exe E:/python-intensive-training/s4.py 正相迭代----- 1.0 1.5 2.0 2.5 3.0 3.5 4.0 反迭代----- 4.0 3.5 3.0 2.5 2.0 1.5 1.0 Process finished with exit code 0四、如何对迭代器做切片操作?实际案例有某个文本文件,我们想都去其中某范围的内容,如100~300行之间的内容,python中文本文件是可迭代对象,我们是否可以使用类似列表切片的方式得到一个100~300行文件内容的生成器?解决方案使用标准库中的itertools.islice,它能返回一个迭代器对象切片的生成器from itertools import islice f = open('access.log') # # 前500行 # islice(f, 500) # # 100行以后的 # islice(f, 100, None) for line in islice(f,100,300): print(line)islice每次训话都会消耗之前的迭代对象l = range(20) t = iter(l) for x in islice(t, 5, 10): print(x) print('第二次迭代') for x in t: print(x)输出结果C:PythonPython35python.exe E:/python-intensive-training/s5.py 5 6 7 8 9 第二次迭代 10 11 12 13 14 15 16 17 18 19 Process finished with exit code 0五、如何在一个for语句中迭代多个可迭代对象?实际案例1、某班学生期末考试成绩,语文、数学、英语分别存储再3个列表中,同时迭代三个列表,计算每个学生的总分(并行)2、某年纪有四个班,某次考试没班英语成绩分别存储在四个列表中,依次迭代每个列表,统计全学年成绩高于90分人数(串行)解决方案并行:使用内置函数zip,它能将多个可迭代对象合并,每次迭代返回一个元组from random import randint # 申城语文成绩,# 40人,分数再60-100之间 chinese = [randint(60, 100) for _ in range(40)] math = [randint(60, 100) for _ in range(40)] # 数学 english = [randint(60, 100) for _ in range(40)] # 英语 total = [] for c, m, e in zip(chinese, math, english): total.append(c + m + e) print(total)执行结果如下:C:PythonPython35python.exe E:/python-intensive-training/s6.py [232, 234, 259, 248, 241, 236, 245, 253, 275, 238, 240, 239, 283, 256, 232, 224, 201, 255, 206, 239, 254, 216, 287, 268, 235, 223, 289, 221, 266, 222, 231, 240, 226, 235, 255, 232, 235, 250, 241, 225] Process finished with exit code 0串行:使用标准库中的itertools.chain,它能将多个可迭代对象连接from random import randint from itertools import chain # 生成四个班的随机成绩 e1 = [randint(60, 100) for _ in range(40)] e2 = [randint(60, 100) for _ in range(42)] e3 = [randint(60, 100) for _ in range(45)] e4 = [randint(60, 100) for _ in range(50)] # 默认人数=1 count = 0 for s in chain(e1, e2, e3, e4): # 如果当前分数大于90,就让count+1 if s & 90: count += 1 print(count)输出结果C:PythonPython35python.exe E:/python-intensive-training/s6.py 48 Process finished with exit code 0总结以上就是这篇文章的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
网友评论仅供其表达个人看法,并不表明网易立场。}

我要回帖

更多关于 python 牛顿迭代法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信