1. 程式人生 > >python第十七課——列表生成式

python第十七課——列表生成式

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第十七課——列表生成式