Python的三元表示式、列表生成式和字典生成式
阿新 • • 發佈:2021-11-19
Python的三元表示式、列表生成式和字典生成式
- 三元表示式
- 列表生成式
- 字典生成式
- 匿名函式
一、三元表示式
1. 三元表示式的格式
當功能需求僅僅是二選一的情況下,推薦使用三元表示式
值1 if 條件 else 值2 '''條件成立用值1 不成立用值2'''
三元表示式在函式中使用
def my_max(a, b): if a > b: return a else: return b
def my_max(a, b): return a if a > b else b
2. 示例
is_free = input('is_free>>>:').strip() is_free = '收費' if is_free=='y' else '免費'
條件成立採用if前面的值 if 條件 else 條件不成立採用else後面的值
三元表示式儘量不要巢狀使用
res = '乾飯' if 10 > 2 else '不幹飯' print(res) res = '乾飯' if 10 > 2 else ('不管飯' if 2 >5 else '寫的啥!') print(res)
is_free = input('電影是否收費(y/n)>>>:').strip()if is_free == 'y': print('收費') else: print('免費') print('收費' if is_free == 'y' else '免費')
username = input('username>>>:') res = 'NB' if username == 'jason' else 'SB' print(res)
二、列表生成式
使用頻率很高
1. 列表生成式的格式
[通過條件判斷之後的變數名 for 變數名 in 可迭代物件 if 條件]
l = [1,2,3,4,5,6,7] res = [i+1 fori in l if i != 4]
2. 示例
name_list = ['jason', 'kevin', 'tony', 'jerry'] # 給列表中所有的人名加上_DSB字尾 '''傳統做法''' # 1.定義一個空列表 new_list = [] # 2.for迴圈老列表 for name in name_list: # 3.生成新的名字 new_name = '%s_DSB'%name # 4.新增到新的列表中 new_list.append(new_name) print(new_list) '''列表生成式''' res = ['%s_DSB' % name for name in name_list] print(res) '''傳統做法''' # 1.定義一個空列表 new_list = [] # 2.for迴圈老列表 for name in name_list: # 3.生成新的名字 if name == 'jason': continue else: new_name = '%s_DSB'%name # 4.新增到新的列表中 new_list.append(new_name) print(new_list) '''列表生成式''' res = ['%s_DSB' % name for name in name_list if name != 'jason'] print(res)
三、字典生成式
1. 列舉
enumerate(l,start=1)
enumerate(l1)
針對該方法使用for迴圈取值,每次會產生兩個結果。
第一個是從0開始的數字
第二個是被迴圈物件裡面的元素
還可以通過start引數控制起始位置
for i, j in enumerate(l1, start=1): print(i, j) name_list = ['jason', 'kevin', 'tony', 'jerry'] res = {i: j for i, j in enumerate(name_list) if j != 'jason'} print(res) res1 = {i for i, j in enumerate(name_list)} print(res1, type(res1))
2. 字典
res = { i:j for i,j in enumerate(l)}
# l1 = ['name', 'age', 'hobby'] # l2 = ['jason', 18, 'read'] # new_dict = {} # for i in range(len(l1)): # new_dict[l1[i]] = l2[i] # print(new_dict) # count = 0 # for i in l1: # print(count,i) # count += 1
3. 集合
res = {i for i,j in enumerate(l)} # 小括號不是生成式 是迭代器
四、匿名函式
1. 匿名函式的概念
沒有名字的函式
2. 匿名函式的語法結構
lambda 形參:返回值
匿名函式一般不會單獨使用,都是配合其他函式一起使用
3. 示例
print(lambda x:x**2) def index(): pass print(index) print((lambda x: x ** 2)(2)) res = lambda x: x ** 2 print(res(2))
4. map() 對映
# map() 對映
# map(函式名,可迭代物件) 結果是一個迭代器
l = [1, 2, 3, 4, 5, 6, 7, 8, 9] def index(n): return n ** 2 print(list(map(lambda x:x**2, l)))