Python 推導(dǎo)式是一種獨(dú)特的數(shù)據(jù)處理方式筋栋,可以從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體栋猖。
Python 支持各種數(shù)據(jù)結(jié)構(gòu)的推導(dǎo)式:
- 1)列表(list)推導(dǎo)式
- 2)字典(dict)推導(dǎo)式
- 3)集合(set)推導(dǎo)式
- 4)元組(tuple)推導(dǎo)式
推導(dǎo)式可以利用 range 區(qū)間肄程、元組、列表辞做、字典和集合等數(shù)據(jù)類型露懒,快速生成一個滿足指定需求的列表/字典/集合/元組。
1. 列表(list)推導(dǎo)式
列表推導(dǎo)式格式為:
[表達(dá)式 for 變量 in 列表]
[expression for item in Sequence ]
或者
[表達(dá)式 for 變量 in 列表 if 條件]
[expression for item in Sequence if condition]
-
expression
:列表生成元素表達(dá)式读宙,可以是有返回值的函數(shù)彻秆。 -
for item in Sequence
:迭代 Sequence 將 item 傳入到 expression 表達(dá)式中。 -
if condition
:條件語句结闸,可以過濾列表中不符合條件的值唇兑。
示例1:將列表names的字符串,轉(zhuǎn)換成大寫字母
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper() for name in names]
>>> new_names
['BOB', 'TOM', 'ALICE', 'JERRY', 'WENDY', 'SMITH']
示例2:計算 30 以內(nèi)可以被 3 整除的整數(shù):
>>> ans = [x for x in range(30) if x%3==0]
>>> ans
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
2. 字典(dict)推導(dǎo)式
字典推導(dǎo)基本格式:
{ key_expr: value_expr for value in collection }
或
{ key_expr: value_expr for value in collection if condition }
示例1:根據(jù)列表中各字符串及其長度創(chuàng)建字典
>>> listdemo = ['Google','Runoob', 'Taobao']
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'Runoob': 6, 'Taobao': 6}
示例2:提供三個數(shù)字桦锄,以三個數(shù)字為鍵扎附,三個數(shù)字的平方為值來創(chuàng)建字典
>>> dict1 = {x:x**2 for x in (1,2,3)}
>>> dict1
{1: 1, 2: 4, 3: 9}
3. 集合(set)推導(dǎo)式
集合推導(dǎo)式基本格式:
{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }
示例1:計算數(shù)字 1,2,3 的平方數(shù)
>>> new_set = {x**2 for x in range(1,4)}
>>> new_set
{1, 4, 9}
示例2:判斷不是 abc 的字母并輸出
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
4. 元組(tuple)推導(dǎo)式
元組推導(dǎo)式返回的結(jié)果是一個生成器對象,而不是元組
元組推導(dǎo)式基本格式:
(expression for item in Sequence )
或
(expression for item in Sequence if conditional )
示例1:生成一個包含數(shù)字 1~9 的元組
>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器對象
>>> tuple(a) # 使用 tuple() 函數(shù)结耀,可以直接將生成器對象轉(zhuǎn)換成元組
(1, 2, 3, 4, 5, 6, 7, 8, 9)