給妹子講python--04迭代和列表解析式
陪伴學習,一路成長。請一起關注,一起點贊吧!
【要點搶先看】
1.遍歷容器的基本方法n2.列表解析式和字典解析式的用法n
【妹子問】前面介紹完了三種基本的容器類,那麼在python里我們怎麼遍歷裡面的所有元素?
這個容易,python里也用for語句,但用起來比C語言里的語法更簡潔一些,我們看看列表迭代的例子:
for x in [1,2,3]:nprint(x)nn1n2n3n
字典因為涉及到鍵和值兩個元素,稍微有一些不同,我們舉兩個常用的方法
第一種方法,通過遍歷鍵來索引對應的值
D = {a:1, c:2, b:3}nfor k in D:nprint({}--->{}.format(k,D[k]))nnc--->2na--->1nb--->3n
再說說第二種方法。
用字典的items方法可以返回可迭代對象,通過對這個可迭代對象進行逐次迭代,就能獲取其每一個鍵值對的元組,然後,即可同時取出鍵和值了。
D = {a:1, c:2, b:3}nfor k,v in D.items():nprint({}--->{}.format(k,v))nnc--->2nb--->3na--->1n
【妹子說】迭代看上去很簡潔,那列表解析式是幹什麼用的?
簡單的說,列表解析式就是用列表來構建列表,通過對已有列表中的每一項應用一個指定的表達式來構建出一個新的列表。列表解析式的優勢是編碼簡單,運行起來很快。
列表解析式由三部分組成:作用於輸入序列的運算表達式、對輸入序列的循環表達式和過濾條件,其中過濾條件是可選的。
比如我們想要用列表a生成列表b,其中列表b中的每個元素都是a中對應元素的二次方
a = [1,2,3,4,5,6,7,8,9,10]nb = [x**2 for x in a]nprint(b)nn[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]n
上面的例子中沒有使用過濾條件,因此就使用了列表a中的所有元素來構造列表b,如果我們只想用列表a中所有能被3整除的數來構造列表b呢,那就得用上過濾條件了。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]nb = [x**2 for x in a if x % 3 == 0]nprint(b)nn[9, 36, 81]n
同樣,也存在字典解析式,可以用字典以及列表等這些可以迭代的數據類型,來構造一個新的字典
先看用字典構造字典
D1 = {a: 1, b: 2, c: 3}nD2 = {k: v*2 for (k, v) in D1.items()}nprint(D2)nn{b: 4, a: 2, c: 6}n
再舉一個用列表構造字典的例子:
D = {c:c*4 for c in [a, b, c, d]}nprint(D)nn{d: dddd, a: aaaa, c: cccc, b: bbbb}n
【妹子說】解析式用起來很簡潔,而且可讀性也比較強,是個不錯的用法。
推薦閱讀:
※客戶端產品迭代周期為多長時間比較合適?
※「遞歸」和「迭代」有哪些區別?
※c++ 二叉樹的中序遍歷(非遞歸實現)是哪裡出錯了?
※AP演算法中兩個參數的交替過程怎麼樣通俗的理解?