流暢的python和cookbook學習筆記(一)
阿新 • • 發佈:2017-08-24
構造函數 推導 笛卡爾 expr 列表推導 叠代 建立 笛卡兒 imp
1.數據結構
1.1 內置序列類型
四種序列類型:
1.容器序列:list、tuple和collections.deque
2.扁平序列:str、bytes、bytearray、memoryview和array.array
3.可變序列:list、bytearray、array.array、collections.deque 和 memoryview
4.不可變序列:tuple、str 和 bytes
1.2 列表推導
1.列表推導(list comprehension):列表推導是構建列表(list)的快捷方式,簡潔的寫法。
列表推導的作用只有一個:生成列表。
>>> symbols = ‘$¢£¥€¤‘ >>> codes = [ord(symbol) for symbol in symbols] # 用方括號括起來,內部用for循環生成多個值 >>> codes [36, 162, 163, 165, 8364, 164]
2.表達式內部的變量和賦值只在局部起作用,表達式的上下文裏的同名變量還可以被正常引用,局部變量並不會影響到它們。
>>> x = ‘ABC‘ >>> dummy = [ord(x) for x in x] >>> x ‘ABC‘ >>> dummy [65, 66, 67]
即 x 的值不會被列表推導中的循環中的 x 值所影響。
1.3 生成器表達式
1.生成式表達器(generator expression):生成器表達式遵守了叠代器協議,可以逐個地產出元素,而不是先建立一個完整的列表,然後再把這個列表傳遞到某個構造函數裏。這樣更節省內存。
生成器表達式的語法跟列表推導差不多,只不過把方括號換成圓括號而已。
用生成器表達式初始化元組和數組:
>>> symbols = ‘$¢£¥€¤‘ # 初始化元組 >>> tuple(ord(symbol) for symbol in symbols) #如果生成器表達式是一個函數調用過程中的唯一參數,那麽不需要額外再用括號把它圍起來。 (36, 162, 163, 165, 8364, 164) >>> import array # 初始化數組 >>> array.array(‘I‘, (ord(symbol) for symbol in symbols)) # array 的構造方法需要兩個參數,因此括號是必需的。array 構造方法的第一個參數,即(‘I‘)指定了數組中數字的存儲方式。 array(‘I‘, [36, 162, 163, 165, 8364, 164])
1.4 笛卡爾積
笛卡兒積是一個列表,列表裏的元素是由輸入的可叠代類型的元素對構成的元組,因此笛卡兒積列表的長度等於輸入變量的長度的乘積。
1.使用列表推導計算笛卡兒積
>>> colors = [‘black‘, ‘white‘] >>> sizes = [‘S‘, ‘M‘, ‘L‘] >>> tshirts = [(color, size) for color in colors for size in sizes] >>> tshirts
[(‘black‘, ‘S‘), (‘black‘, ‘M‘), (‘black‘, ‘L‘), (‘white‘, ‘S‘), (‘white‘, ‘M‘), (‘white‘, ‘L‘)] >>> for color in colors: # 使用for循環是一樣的效果 ... for size in sizes: ... print((color, size)) ... (‘black‘, ‘S‘) (‘black‘, ‘M‘) (‘black‘, ‘L‘) (‘white‘, ‘S‘) (‘white‘, ‘M‘) (‘white‘, ‘L‘) >>> tshirts = [(color, size) for size in sizes for color in colors] # 改變參數位置,輸出順序不同 >>> tshirts [(‘black‘, ‘S‘), (‘white‘, ‘S‘), (‘black‘, ‘M‘), (‘white‘, ‘M‘), (‘black‘, ‘L‘), (‘white‘, ‘L‘)]
2.使用生成器表達式計算笛卡兒積
>>> colors = [‘black‘, ‘white‘] >>> sizes = [‘S‘, ‘M‘, ‘L‘] >>> for tshirt in (‘{} {}‘.format(c, s) for c in colors for s in sizes): ... print(tshirt) ... black S black M black L white S white M white L
流暢的python和cookbook學習筆記(一)