1.數據結構 1.1 內置序列類型 四種序列類型: 1.容器序列:list、tuple和collections.deque 2.扁平序列:str、bytes、bytearray、memoryview和array.array 3.可變序列:list、bytearray、array.array、coll ...
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