python控制结构、迭代器和生成器(个人笔记)

参考:https://docs.python.org/2.7/reference/compound_stmts.html#while
https://www.cnblogs.com/lclq/p/5586198.html (python的运算与表达式)
https://www.zhihu.com/question/20829330 (python的迭代器)
https://www.cnblogs.com/devin-guwz/p/5738676.html(python入门例题

python中的真假:
非零数字为真,否则为假
非空对象为真,否则为假
None则始终为假

不同类型的比较方法:
数字:通过相对大小进行比较
字符串:按照字典次序逐字符进行比较
列表和元组:自左向右比较各部分内容
字典:对排序之后的(键,值)列表进行比较

if条件语句:
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]

while条件语句:
while_stmt ::= "while" expression ":" suite
["else" ":" suite]

for条件语句:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]

这些条件语句跟shell脚本没太大区别,主要差别在于:
    1.python用相同的空格在区分结构体(这是为了强制大家保持良好编程风格的缘故,而shell脚本而有对应的结束符,比如if有fi对应)
    2.while和for多了个else控制结构,这个else是指在循环正常执行完成后,最后执行一次

迭代器和生成器:

迭代器提供了一个统一的访问集合的接口。只要是实现了__iter__()或__getitem__()方法的对象,就可以使用迭代器进行访问。

生成器也可以迭代,但是生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束

两种都是类似的东西,主要差别在于:迭代器一次就生成了所有可能用到的对象,而生成器一次只生成一个需要用到的对象

例题:
1.求100以内所有偶数的和
使用while:
sum=0
i=0
while i<=100:
sum+=i
i+=2

使用for:
    sum=0
    for i in range(1,101):
         if i%2==0:
             sum+=i

2.创建一个包含了100以内所有奇数的列表
使用while:
l1=[]
i=1
while i<100:
l1.append(i)
i+=2
使用for:
l1=[]
for i in range(1,101):
if i%2 !=0:
l1.append(i)

使用expression for target_list "in" expression_list if expression_list 表达式:
    l2=[i for i in range(1,100)if i%2!=0]

3.列表l1=[0,1,2,3,4,5,6] 列表l2=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘],以第一个列表为键,第二个列表为值,生成字典d
d={l1[i]:l2[i] for i in range(0,7)}

3.1 逐一打印字典d中的键值对
for (k,v) in d.items():
print k,v

4.将属于列表l1=[1,2,3,4,5,6],不属于l2=[2,3,4]的列表生成新的列表l3
l3=[i for i in l1 if i not in l2 ]

原文地址:http://blog.51cto.com/linzb/2086064

时间: 2024-08-30 06:17:55

python控制结构、迭代器和生成器(个人笔记)的相关文章

python之迭代器与生成器

python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i in 12345: print(i) 结果: Traceback (most recent call last): File "C:/Pycham/生成器与迭代器/test1.py", line 6, in <module> for i in 12345: TypeError:

Python的迭代器和生成器

先说迭代器,对于string.list.dict.tuple等这类容器对象,使用for循环遍历是很方便的就,在后台for语句对容器对象对象调用iteration()函数,这是python的内置函数,iter()会返回一个定义next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数.在没有后续元素是,调用next()会抛出一个StopIteration异常 上面说的都是python自带的容器对象,它们都实现了相应的迭代器方法,自定义类的遍历怎么实现,方法是

python中迭代器和生成器。

前言:很多python教程中,对python的解释不容易理解,本文记录自己的理解和体会,是对迭代器和生成器的初步理解. 迭代器: 迭代器的实质是实现了next()方法的对象,常见的元组.列表.字典都是迭代器. 迭代器中重点关注两种方法: __iter__方法:返回迭代器自身.可以通过python内建函数iter()调用. __next__方法:当next方法被调用的时候,迭代器会返回它的下一个值,如果next方法被调用,但迭代器没有只可以返回,就会引发一个StopIteration异常.该方法可

【Python】迭代器、生成器、yield单线程异步并发实现详解

转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从理论+程序调试验证的方式详细讲解这部分知识,话不多说,直接进入主题. 一.迭代器(Iterater):     首先介绍迭代器,迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.是不是觉得跟for循环很像?但是迭代器有几个特性需记住:    1.访问者

python之 迭代器,生成器

什么叫跌代: 可以将某个数据集合内的数据一个一个挨着取出来就叫做跌代. 迭代器协议: 可以被跌代要满足的要求叫做可迭代协议,可迭代对象必须提供一个next的方法,执行该方法要么返回跌代中的下一项,要么就引起一个StopIteration异常,以终止跌代(跌代只能往后走,而不能往前退) python中的for循环: for循环的本质就是遵循迭代器协议去访问对象,for循环可以遍历(字符串,列表,元祖,字典,集合,文件对象)这些对象都是不可迭代对象,只不过在for循环时,调用了他们内部的-iter-

python基础----迭代器、生成器、协程函数

一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象. 二,为什么要用迭代器 优点: 1:迭代器提供了一种不依赖于索引的取值方式,

day13 python学习 迭代器,生成器

1.可迭代:当我们打印 print(dir([1,2]))   在出现的结果中可以看到包含 '__iter__', 这个方法,#次协议叫做可迭代协议 包含'__iter__'方法的函数就是可迭代函数 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 2.迭代器 iterator l = [1,2,3,4] l_iter = l.__iter__() #迭代器的生成 item = l_iter.__next__() #迭代器的使用,用此方法一一钓鱼迭代器中的数值 print

Python之迭代器、生成器、装饰器和递归

一.迭代器&生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头

python中迭代器和生成器的区别

1 #!/usr/bin/python 2 def power(values): 3 for value in values: 4 print "powing %s" % value 5 yield value 6 def add(values): 7 for value in values: 8 if value % 2 == 0: 9 yield value + 3 10 else: 11 yield value + 2 12 elements = [1, 4, 7, 9, 12,

python基础-迭代器和生成器

一.递归和迭代 1.递归:(问路示例) 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 2.迭代:简单理解为更新换代( 儿子生孙子的故事) 二.迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter_