列表推導是一種構建列表(list)的快捷方式
#列表推導同filter()和map()比較列表推導
symbols = '
!@#$%
'codes = [ord(symbol) for symbol in symbols] #
ord()python內建函式,將字元變成unicode碼位,返回值為對應十進位制
print(codes)
"""1.fitter()函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
語法:filter(function, iterable)
引數:function -- 判斷函式
iterable -- 可迭代物件
2.map()函式會根據提供的函式對指定序列做對映。
第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。
語法:map(function, iterable, ...)
引數:function -- 函式
iterable -- 乙個或多個序列
3.lambda函式是乙個簡短的匿名函式,可以接收任意數量的引數,但只能包含乙個表示式。
語法:lambda 引數:表示式
"""
symbols = '笛卡爾積:用列表推導可以生成兩個或以上的可迭代型別的笛卡兒積。笛卡兒積是乙個列表,列表裡的元素是由輸入的可迭代型別的元素對構成的元組,因此笛卡兒積列表的長度等於輸入變數的長度的乘積!@#$%
'codes = [ord(symbol) for symbol in symbols if ord(symbol) > 50]
(codes)
codes = list(filter(lambda c: c > 50, map(ord, symbols)))
print(codes)
雖然也可以用列表推導來初始化元組、陣列或其他序列型別,但是生成器表示式是更好的選擇。這是因為生成器表示式背後遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。前面那種方式顯然能夠節省記憶體。生成器表示式的語法跟列表推導差不多,只不過把方括號換成圓括號而已。
#用生成器表示式初始化元組和陣列
symbols = '
!@#$%
'codes = tuple(ord(symbol) for symbol in
symbols)
(codes)
import
array
arr = array.array('
i', (ord(symbol) for symbol in
symbols))
(arr)
#使用生成器表示式計算笛卡爾積
colors = ['
black
', '
white']
sizes = ['
s', '
m', 'l'
]#'%s'%表示格式化乙個物件為字元
元組拆包可以應用到任何可迭代物件上,唯一的硬性要求是,被可迭代物件中的元素數量必須要跟接受這些元素的元組的空檔數一致。除非我們用 * 來表示忽略多餘的元素。
#元組拆包: 平行賦值,也就是說把乙個可迭代物件裡的元素,一併賦值到由對應的變數組成的元組中
alpha_num = ('
a', 97)
alpha, num =alpha_num
(alpha, num)
#不使用中間變數交換兩個變數的值
a = 'a'
b = 97b, a =a, b
(a, b)
#用 * 運算子把乙個可迭代物件拆開作為函式的引數
print(divmod(20, 8))#
divmod(a, b)函式把除數和餘數運算結果結合起來,返回乙個包含商和餘數的元組(a // b, a % b)。
t = (20, 8)
print(divmod(*t))
#讓乙個函式可以用元組的形式返回多個值
import
os_, filename = os.path.split('
test.txt
')#函式返回路徑和檔名
(filename)
#用*來處理剩下的元素
a, b, *rest = range(5)
(a, b, rest)
#在平行賦值中,* 字首只能用在乙個變數名前面,但是這個變數可以出現在賦值表示式的任意位置
巢狀元組拆包
alpha_a = [('
a', '
a', (97, 65))]
for small, capital, (num_small, num_capital) in
alpha_a:
(num_small, num_capital)
#具名元組collections.namedtuple 是乙個工廠函式,它可以用來構建乙個帶欄位名的元組和乙個有名字的類
#建立乙個具名元組需要兩個引數,乙個是類名,另乙個是類的各個欄位的名字。後者可以是由數個字串組成的可迭代物件,或者是由空格分隔開的欄位名組成的字串。
from collections import
namedtuple
country_capital = namedtuple('
c_c', '
country capital')
comb = country_capital('
china
', '
beijing')
(comb)
#具名元組還有一些自己專有的屬性。中就展示了幾個最有用的:_fields 類屬性、類方法 _make(iterable) 和例項方法_asdict()。
#_fields 屬性是乙個包含這個類所有欄位名稱的元組,
#用 _make() 通過接受乙個可迭代物件來生成這個類的乙個例項,它的作用跟city(*delhi_data) 是一樣的。
#_asdict() 把具名元組以 collections.ordereddict 的形式返回,我們可以利用它來把元組裡的資訊友好地呈現出來。
Python學習筆記 04 程式的構成
python程式由模組組成。乙個模組對應python原始檔,一般字尾名是.py 模組由語句組成,執行python時,按照模組中語句的順序依次執行 語句是python程式的構造單元,用於建立物件,變數賦值 呼叫函式 控制語句 在互動式環境中,每次只能執行一條語句,為了編寫多條語句實現複雜的邏輯,我們通...
python序列學習筆記
序列均從0開始遞增 最後乙個元素的位置編號是 1 示例 分片 例如有這樣乙個序列arrs 1,2,3,4,5,6,7,8,9,10 訪問序列第8,9,10個元素,arrs 7 10 8,9,10 注意元素的標識是0 9,即從標識為7的元素開始 包含7 取到標識為10的元素 不包含10 簡單記作 7 ...
Python學習筆記 序列
1.序列 我們根據列表 元祖和字串的共同特點,把它們三統稱為序列。這三者有以下共同點 1 都可以通過索引得到每乙個元素 2 預設索引值總是從0開始 python還支援負數索引 3 可以通過分片的方法得到乙個範圍內的元素的集合 4 有很多共同的操作符 重複操作符 拼接操作符 成員關係操作符 2.迭代 ...