===使用项和索引迭代===

使用内建函数 enumerate()函数
nameList = ['Donn', 'Shirley', 'Ben', 'Janice',... 'David', 'Yen', 'Wendy']
for i, eachLee in enumerate(nameList):
... print "%d %s Lee" % (i+1, eachLee)
...
1 Donn Lee
2 Shirley Lee
3 Ben Lee
4 Janice Lee
5 David Lee
6 Yen Lee
7 Wendy Lee

与序列有关的内建函数

xrange()类似range(),使用的情景是一个用于很大范围的列表,但是不可用于for循环以外的时候
sorted()返回一个已经排序的列表。
reversed()返回一个顺序颠倒的序列。
zip():传入两个列表,返回一个包含两个列表的列表。

以前的误解

continue 语句"立即启动循环的下一次迭代". 实际上, 当遇到continue 语句时, 程序会终止当前循环,并忽略剩余的语句, 然后回到循环的顶端.
else的其他使用方法。
在循环中使用时, else子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.

迭代器

  1. 迭代器是什么:提供类序列对象的类序列接口
  2. 为什么使用迭代器:性能增强。创建了迭代接口,而不是随机对象访问。代码更加简洁。
  3. 如何使用迭代器:enumerate(),iter()返回一个迭代器,reversed()返回一个反序访问的迭代器。还有iterools模块,有各种迭代器。
    any()和all(),如果迭代器的所有的值都为布尔真的话,返回值为真,感觉没什么用。
    实际上使用for循环序列的话,会自己生成一个迭代器。

    字典方法的迭代器:dict.iterkeys()通过keys迭代。dict.itervalues()通过values迭代。dict.iteritems()通过key-values来迭代。

    4.迭代器的局限性:不能移动,不能回到开始。不能复制。迭代可变对象,不可以修改对象。

生成器与列表解析

生成器是列表解析的一个扩展。

  1. 列表解析:可以动态的创建列表。简单,灵活。
    例子:[expr for iter_var in iterable if comdition]
    for循环迭代iterable对象所有的条目,if 是筛选满足条件的条目,前面的expr应用于序列的每个成员。最后结果值是该表达式的列表。
    例子:map(lambda x: x ** 2, range(6)) 这是一个计算序列成员平方的lmbda函数表达式:

    扩展:

    map(function, list)函数作用是,把list中所有元素都做函数的操作。
    lambda函数表达式,相当于一个单条语句的函数。

上面的例子等效于>>>[x**2 for x in range(6)]
[0,1,4,9,16,25]
但是列表解析的效率更高。

更多的例子:迭代一个三行五列的矩阵。
[(x+1,y+1) for x in range(3) for y in range(5)]

  1. 生成器表达式
    列表解析的一个不足就是必要生成所有的数据, 用以创建整个列表. 这可能对有大量数据的迭
    代器有负面效应.(其实就是占内存) 生成器表达式通过结合列表解析和生成器解决了这个问题.
    生成器表达式:(expr for iter_var in iterable if cond_expr)
    不需要创建新的列表, 直接就可以创建配对. 我们可以使用下面的生成器表达式:
    x_product_pairs = ((i, j) for i in rows for j in cols())

练习

8–5. 约数. 完成一个名为 getfactors() 的函数. 它接受一个整数作为参数, 返回它所有约数的列表, 包括 1 和它本身,
def getfactors(number):
return [x for x in range(1,number+1) if number%x==0]
列表解析真好用。。
8–6. 素因子分解. 以刚才练习中的 isprime() 和 getfactors() 函数为基础编写一个函
数, 它接受一个整数作为参数, 返回该整数所有素数因子的列表. 这个过程叫做求素因子分解, 它
输出的所有因子之积应该是原来的数字. 注意列表里可能有重复的元素. 例如输入 20 , 返回结果
应该是 [2, 2, 5] .

def getfactors(number):return [x for x in range(1, number+1) if number%x==0]
def isprime(number):"判断是否是素数"return len(getfactors(number)) == 2
def factor_resolve(number):factor = []lists = getfactors(number)lists = [lists[1],lists [-2]]print listsfor i in lists:if isprime(i):factor.append(i)else:factor+=factor_resolve(i)return factor
print  factor_resolve(20)

8–7. 全数. 完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 6
的约数是 1, 2, 3, 因为 1 + 2 + 3 = 6 , 所以 6 被认为是一个完全数. 编写一个名为 isperfect()的函数,
它接受一个整数作为参数, 如果这个数字是完全数, 返回 1 ; 否则返回 0 .

def getfactors(number):return [x for x in range(1, number+1) if number%x==0 and number!=x]
def isperfect(number):return sum(getfactors(number))==number
print isperfect(6)

8–8. 阶乘. 一个数的阶乘被定义为从 1 到该数字所有数字的乘积. N 的阶乘简写为 N! .
写一个函数, 指定 N, 返回 N! 的值.

def xmul(number):return reduce(lambda x,y:x*y,range(1,number+1))
print xmul(4)

8–9. Fibonacci 数列. Fibonacci 数列形如 1, 1, 2, 3, 5, 8, 13, 21, 等等. 也就是说,
下一个值是序列中前两个值之和. 写一个函数, 给定 N , 返回第 N 个 Fibonacci 数字. 例如, 第
1 个 Fibonacci 数字是 1 , 第 6 个是 8 .

def series(number):number_list = [1,1]for i in range(number-2):number_list.append(number_list[i]+number_list[i+1])#print number_listreturn number_list[number-1]
print series(100)

8–12. (整数)位操作. 编写一个程序, 用户给出起始和结束数字后给出一个下面这样的表格,
分别显示出两个数字间所有整数的十进制, 二进制, 八进制和十六进制表示. 如果字符是可打印的
ASCII 字符, 也要把它打印出来, 如果没有一个是可打印字符, 就省略掉 ASCII 那一栏的表头.

def number_form(start,stop):number_list = []for i in range(start,stop+1):temporary_list = [i, hex(i), oct(i), bin(i)]try:temporary_list.append(chr(i))except:temporary_list.append(None)number_list.append(temporary_list)return number_list
for i in number_form(1,100):print i

转载于:https://www.cnblogs.com/jikeboy/p/5911502.html

python核心编程 第八章相关推荐

  1. 【5】python核心编程 第八章-条件和循环

    1.=== range() 的完整语法=== 1 Python 提供了两种不同的方法来调用 range() . 完整语法要求提供两个或三个整数参数: 2 range(start, end, step ...

  2. 拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高 ...

  3. python3.5.0下载-python核心编程最新版下载

    python核心编程是一款专门为Python学习者打造的手机学习软件,同时也是老手编程重要的参考书,为用户提供高级的代码编辑.交互测试.调试等功能,十分的便捷好用,快来下载体验吧. 关于Python: ...

  4. python核心编程第三版_Python之父:自学python,这3本书能节约你一大半时间编程...

    今天给大家推荐三本书,有两本是属于一个系列,即<Python核心编程>第二版和第三版,一本讲基础和一本讲进阶,非常适合Python的初学者和有一定基础的学习者.还有一本书适合所有想学Pyt ...

  5. python核心编程第二版pdf_Python Book电子书pdf版合集 Python核心高级编程第二版

    1小时学会Python.doc 51CTO下载-[Python系列].BeginningPythonFromNovicetoProfessionalSecondEdition.pdf 8.Python ...

  6. 对《Python核心编程》中“第一个Python程序”的改进

    概述: 本程序主要是模仿<Python核心编程>中3.6节--第一个Python程序,并在其基础上做了一些小的改进,而改进的要求则是来源于第三章的课后练习题. 本篇博客的一个核心问题就是在 ...

  7. 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-

    <Python核心编程>第二版第36页第二章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 2.21 练习 2-1. 变量,print和字符串格式化操作符.启动交互式解 ...

  8. 《Python核心编程(第二版)》——1.9 练习

    本节书摘来自异步社区<Python核心编程(第二版)>一书中的第1章,第1.9节,作者[美]Wesley J. Chun,宋吉广 译,更多章节内容可以访问云栖社区"异步社区&qu ...

  9. python3 socketserver_《Python核心编程(第3版)》——2.5 *SocketServer模块

    本节书摘来自异步社区<Python核心编程(第3版)>一书中的第2章,第2.5节,作者[美] Wesley Chun(卫斯理 春),孙波翔 李斌 李晗 译,更多章节内容可以访问云栖社区&q ...

最新文章

  1. django学习笔记【003】创建第一个带有model的app
  2. 浪子回头,从学渣变成学霸,就了不起吗?
  3. python中mainloop什么意思_Python Turtle mainloop()用法
  4. 2018第九届蓝桥杯C/C++ B国赛 —— 第六题:矩阵求和
  5. 较Win7企业更愿用Win10?原因就在这里
  6. Linux: .bash_profile 与 .bashrc 的区别
  7. ICCV2021多模态视频分析与推理比赛参赛邀请
  8. Vue中登陆超时,返回登陆页面
  9. 软件架构师的12项修炼[2]——关系技能修炼(2)——领导力、政治
  10. 【SEO工具】国内外网站速度测试工具都有哪些
  11. 帝国CMS采集帝国模板程序通用
  12. ViewPager2
  13. 说说 隋唐演义 等英雄排名
  14. 微博舆情 之 自然语言处理
  15. linux xunsou_mysql中文分词全文搜索索引讯搜的安装
  16. 软件測试系列之入门篇(一)
  17. 在两个数字之间求出其间所有质数
  18. xamarin textview 滚动_划重点 | 不能不知的滚动轴承知识—轴承分类
  19. 统计学习方法感知机(附简单模型代码)
  20. 查看测试代码覆盖率solidity-coverage

热门文章

  1. poj 3590 The shuffle Problem(置换群+DP)
  2. 关于推荐和机器学习的几个网站
  3. 不错html5画布效果,可惜网站不需要。亲们,可以看一下~
  4. asp.net Repeater取得CheckBox选中的某行某个值的c#写法
  5. Kubernetes 容器编排
  6. nginx-URL重写
  7. movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码)
  8. c语言贪吃蛇最简单,熬书几个月,终于编出简易的贪吃蛇了,VS2013
  9. 7 centos ssh 单机_虚拟机下CentOS7 开启SSH连接
  10. 如何用 Nacos 构建服务网格生态?