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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ]

以上是关于python控制结构迭代器和生成器(个人笔记)的主要内容,如果未能解决你的问题,请参考以下文章

流畅python学习笔记:第十四章:迭代器和生成器

Python学习笔记——迭代器和生成器

Python迭代器和生成器的个人理解,再讲一讲协程

迭代器和生成器入门

python迭代器和生成器

Python3 迭代器和生成器