4-4日 列表推導式,生成器推導式
阿新 • • 發佈:2018-04-05
兩種模式 span 一個 列表 bsp 字符 ali eva pos
1,列表推導式就是在列表中進行for 循環if語句判斷,最多兩個for,一個if判斷
#求1到30 被3整除的數的平方 li = [i*i for i in range(1,31)if i%3 == 0] print(li)
li = [i for i in range(1,101)if i%2 == 0] l2 = [i for i in range(1,101)if i%2 == 1] print(li) print(l2)
#求列表中帶兩個‘e‘名字
names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘], [‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]] li = [name for i in names for name in i if name.count(‘e‘)==2] print(li)
用列表推導式能夠構建的任何列表,用別的都可以構建。一行,簡單,感覺高端。但是不易排錯。
l2 = [‘python%s期‘%i for i in range(1,12)] print(l2)
列表推導式有兩種模式:
1,循環模式,[經過加工的 i for i in 可叠代對象 ]
2,篩選模式,[經過加工的 i for i in 可叠代對象,if 條件語句篩選]
2, 生成器推導式
把列表解析的 [ ] 換成 ( ) 得到的就是生成器表達式。
l_obj = (‘python%s期‘%i for i in range(1,12)) print(l_obj) print(l_obj.__next__())
3,字典推導式,
1,將dic的鍵和值對調。
mcase = {‘a‘:10,‘b‘:33} mcase_frequency = {mcase[k]:k for k in mcase}print(mcase_frequency)
2,合並大小寫對應的value值,將k統一成小寫
mcase = {‘a‘:10,‘b‘:33,‘A‘:8,‘Z‘:9} mcase_frequency = {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0)for k in mcase.keys()} print(mcase_frequency)
4,集合的推導式
計算列表中每個值的平方,自帶去重功能
squared = {x**2for x in [1,-1,2]} print(squared)
例1: 過濾掉長度小於3的字符串列表,並將剩下的轉換成大寫字母
例2: 求(x,y)其中x是0-5之間的偶數,y是0-5之間的奇數組成的元祖列表
例3: 求M中3,6,9組成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
4-4日 列表推導式,生成器推導式