天天看點

給妹子講python-S01E04容器周遊和清單解析式

【要點搶先看】

1.周遊容器的基本方法

2.清單解析式和字典解析式的用法

【妹子問】前面三集我們學習了三種基本的容器,現在我有一個疑問,我們如何依次通路容器中的所有元素呢?

好問題,那這一集我們就初步學習如何周遊這些容器。

這個容易,python裡也用for語句,但用起來比C語言裡的文法更簡潔一些,我們看看清單疊代的例子:

for x in [1,2,3]:
    print(x)

1
2
3
           

字典因為涉及到鍵和值兩個元素,稍微有一些不同,我們舉兩個常用的方法

第一種方法,通過周遊鍵來索引對應的值

D = {'a':1, 'c':2, 'b':3}
for k in D:
    print('{}--->{}'.format(k,D[k]))

c--->2
a--->1
b--->3
           

再說說第二種方法。

用字典的items方法可以傳回可疊代對象,通過對這個可疊代對象進行逐次疊代,就能擷取其每一個鍵值對的元組,然後,即可同時取出鍵和值了。

D = {'a':1, 'c':2, 'b':3}
for k,v in D.items():
    print('{}--->{}'.format(k,v))

c--->2
b--->3
a--->1
           

【妹子說】python中對于容器的周遊看上去很簡潔,那這一集标題中的清單解析式是幹什麼用的?

清單解析式是python中的一個亮點文法。本質上就是用清單來建構清單,通過對已有清單中的每一項應用一個指定的表達式來建構出一個新的清單。清單解析式的優勢是編碼簡單,運作起來很快。

清單解析式的三個核心要素是:

1.作用于輸入序列的運算表達式;

2.對輸入序列的循環表達式;

3.對輸入序列的過濾條件,其中過濾條件是可選的。

【妹子說】别光說一二三,來舉個例子說說

比如我們想要用清單a生成清單b,其中清單b中的每個元素都是a中對應元素的二次方

a = [1,2,3,4,5,6,7,8,9,10]
b = [x**2 for x in a]
print(b)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
           

這個例子中,輸入序列是a,運算表達式是x**2,循環表達式是for x in a。這個例子沒有使用過濾條件,是以就使用了清單a中的所有元素來構造清單b,如果我們隻想用清單a中所有能被3整除的元素來構造清單b呢,那就得用上過濾條件了。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x % 3 == 0]
print(b)

[9, 36, 81]
           

同樣,對于字典也有同樣的用法。

字典解析式,可以用字典以及清單等這些可以疊代的資料類型,來構造一個新的字典。

先看用字典構造字典

D1 = {'a': 1, 'b': 2, 'c': 3}
D2 = {k: v*2 for (k, v) in D1.items()}
print(D2)

{'b': 4, 'a': 2, 'c': 6}
           

再舉一個用清單構造字典的例子:

D = {c:c*4 for c in ['a', 'b', 'c', 'd']}
print(D)

{'d': 'dddd', 'a': 'aaaa', 'c': 'cccc', 'b': 'bbbb'}
           

【妹子說】python容器周遊的文法看上去簡潔而清爽。解析式呢,我感覺是周遊文法的一種更進階的展現和應用,使用簡潔,而且可讀性也比較強。這一集在前面幾集的基礎上,我感覺是一個總結和提升。

原文釋出時間為:2018-07-24

本文作者:醬油哥

本文來自雲栖社群合作夥伴“

Python愛好者社群

”,了解相關資訊可以關注“