python核心编程 第八章
===使用項和索引迭代===
使用內建函數 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 塊.
迭代器
如何使用迭代器:enumerate(),iter()返回一個迭代器,reversed()返回一個反序訪問的迭代器。還有iterools模塊,有各種迭代器。
any()和all(),如果迭代器的所有的值都為布爾真的話,返回值為真,感覺沒什么用。
實際上使用for循環序列的話,會自己生成一個迭代器。
字典方法的迭代器:dict.iterkeys()通過keys迭代。dict.itervalues()通過values迭代。dict.iteritems()通過key-values來迭代。
4.迭代器的局限性:不能移動,不能回到開始。不能復制。迭代可變對象,不可以修改對象。
生成器與列表解析
生成器是列表解析的一個擴展。
列表解析:可以動態的創建列表。簡單,靈活。
例子:[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)]
列表解析的一個不足就是必要生成所有的數據, 用以創建整個列表. 這可能對有大量數據的迭
代器有負面效應.(其實就是占內存) 生成器表達式通過結合列表解析和生成器解決了這個問題.
生成器表達式:(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] .
8–7. 全數. 完全數被定義為這樣的數字: 它的約數(不包括它自己)之和為它本身. 例如: 6
的約數是 1, 2, 3, 因為 1 + 2 + 3 = 6 , 所以 6 被認為是一個完全數. 編寫一個名為 isperfect()的函數,
它接受一個整數作為參數, 如果這個數字是完全數, 返回 1 ; 否則返回 0 .
8–8. 階乘. 一個數的階乘被定義為從 1 到該數字所有數字的乘積. N 的階乘簡寫為 N! .
寫一個函數, 指定 N, 返回 N! 的值.
8–9. Fibonacci 數列. Fibonacci 數列形如 1, 1, 2, 3, 5, 8, 13, 21, 等等. 也就是說,
下一個值是序列中前兩個值之和. 寫一個函數, 給定 N , 返回第 N 個 Fibonacci 數字. 例如, 第
1 個 Fibonacci 數字是 1 , 第 6 個是 8 .
8–12. (整數)位操作. 編寫一個程序, 用戶給出起始和結束數字后給出一個下面這樣的表格,
分別顯示出兩個數字間所有整數的十進制, 二進制, 八進制和十六進制表示. 如果字符是可打印的
ASCII 字符, 也要把它打印出來, 如果沒有一個是可打印字符, 就省略掉 ASCII 那一欄的表頭.
轉載于:https://www.cnblogs.com/jikeboy/p/5911502.html
總結
以上是生活随笔為你收集整理的python核心编程 第八章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信开发接口调用(前端+.net服务端)
- 下一篇: 有关 onSaveInstanceSta