python第十七課——列表生成式
阿新 • • 發佈:2019-02-26
ava end php ems span 以及 expr 保留 同時
1.列表生成式:
什麽是列表生成式?
它就是一串表達式,專門用於生成列表對象,當中包含一系列的業務邏輯;
結構:簡介、優雅、閱讀性好;比傳統獲取列表對象來的更加的方便;
它是語法糖的一種;
什麽是語法糖?
我們在實際開發中,碰到比較復雜的業務邏輯,
可能導致代碼的書寫量就上去,語法糖的出現就是在不破壞復雜業務邏輯的同時,
使用更加簡便、少的代碼量來完成一樣的需求,
從而解放程序員,讓你享受編碼的快感...
格式:
[expr for ver1,[ver2] in 序列對象(str、range、list、tuple、set、dict...) if ...]
演示列表生成式的使用以及好處:
需求1:生成1~10的列表
#方式一:不使用列表生成式的方式 print(list(range(1,11))) #方式二:使用列表生成式的方式 print([x for x in range(1,11)])
需求2:生成1+1,2+2,3+3,...,10+10的一個列表
#方式一:不使用列表生成式的方式 lt1=[] for i in range(1,11): lt1.append(i**2) print(lt1) #方式二:使用列表生成式的方式 print([x**2 for x in range(1,11)])
需求3:生成1+1,2+2,3+3,...,10+10中只保留偶數的乘積值到列表中
#方式一:不使用列表生成式的方式 lt2=[] for i in range(1,11): if i%2==0: lt2.append(i**2) print(lt2) for i in range(1,11): if i%2!=0: lt2.append(i**2) print(lt2) #方式二:使用列表生成式的方式 print([x ** 2 for x in range(1,11) if x%2==0])
需求4:實現全接列
a=‘ABC‘
b=‘XYZ‘
效果如下:
[‘AX‘,‘AY‘,‘AZ‘,‘BX‘,...,‘CZ‘]
a=‘ABC‘ b=‘XYZ‘ #方式一:不使用列表生成式的方式 lt3=[] for i in a: for j in b: lt3.append(i+j) print(lt3) #方式二:使用列表生成式的方式 print([x+y for x in a for y in b])
需求5:將字典對象中的鍵和值得到作為一個元素,存入到列表對象中
dic={‘AA‘:‘aa‘,‘BB‘:‘bb‘,‘CC‘:‘cc‘,}
效果如下:
[‘AA=aa‘,‘BB=bb‘,‘CC=cc‘]
dic={‘AA‘:‘aa‘,‘BB‘:‘bb‘,‘CC‘:‘cc‘} #方式一:不使用列表生成式的方式 lt4=[] for k,v in dic.items(): lt4.append(k +‘=‘+v) print(lt4) #方式二:使用列表生成式的方式 print([k + ‘=‘ + v for k,v in dic.items()])
需求6:將lt=[‘PYTHON‘,‘Java‘,‘PHP‘,‘UI‘]中的元素內容都轉換小寫,然後保存到一個列表中返回
lt=[‘PYTHON‘,‘Java‘,‘PHP‘,‘UI‘] #方式一:不使用列表生成式的方式 lt5=[] for i in lt: lt5.append(i.lower()) print(lt5) #方式二:使用列表生成式的方式 print([x.lower() for x in lt])
需求7:將lt=[‘PYTHON‘,‘Java‘,‘PHP‘,‘UI‘,100]中的元素內容都轉換小寫,然後保存到一個列表中返回
lt=[‘PYTHON‘,‘Java‘,‘PHP‘,‘UI‘,100] ‘‘‘ 以下代碼會出錯: 因為lt列表對象中不僅只有str類型的數據,還有int類型的數據。 而lower()函數是屬於str中獨有的函數,其他類型不會調用; 異常類型:AttributeError 解決方式如下: 我們可以先使用內置函數isinstance(obj,type),如果返回True,表示類型匹配: 反之,不匹配,返回False ‘‘‘ print([x.lower() for x in lt]) print([x.lower() for x in lt if isinstance(x,str)])
python第十七課——列表生成式