四種序列型別:
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.列表推導(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.生成式表達器(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.使用列表推導計算笛卡兒積
>>> 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:
...
((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):
...
(tshirt)
...black s
black m
black l
white s
white m
white l
流暢的python 《流暢的python》第一天
我們看到 python 可以用len 或者arr 0 它們是怎麼實現的,其實就是兩個魔法方法 len 和 getitem 用撲克牌的例子學習一下,我們知道知道撲克牌有花色 黑桃,紅桃,方塊,梅花 有大小 2 10 jqka 如何創造一套牌的物件呢?首先學習collections的namedtuple...
流暢的python和cookbook學習筆記(二)
任何的序列 或者是可迭代物件 可以通過乙個簡單的賦值語句解壓並賦值給多個 變數。唯一的前提就是變數的數量必須跟序列元素的數量是一樣的。1.平行賦值 x 1,2 a,b x 元組拆包 a 1 b 2 2.以用 運算子把乙個可迭代物件拆開作為函式的引數 divmod 20,8 20求8的餘,2 8 4 ...
流暢的python 魔術方法
第一章 流暢的python 裡面的描述 python 的魔術方法 magic method 是特殊方法的暱稱。一般是用 雙下劃線 名稱 雙下劃線 形式來表示,整體念起來也拗口,所以也有人把這種特殊方法名為稱為 雙下方法 dunder method 有關於特殊方法一覽,可以參考data model t...