1. 程式人生 > >python控制結構、叠代器和生成器(個人筆記)

python控制結構、叠代器和生成器(個人筆記)

if while

參考: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控制結構、叠代器和生成器(個人筆記)