Python的列表推导式
生活随笔
收集整理的這篇文章主要介紹了
Python的列表推导式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
列表推導(dǎo)式是Python基礎(chǔ),好用,而又非常重要的功能,也是最受歡迎的Python特性之一,可以說掌握它是成為合格Python程序員的基本標(biāo)準(zhǔn)。本質(zhì)上可以把列表推導(dǎo)式理解成一種集合了變換和篩選功能的函數(shù),通過這個函數(shù)把一個列表轉(zhuǎn)換成另一個列表。注意是另一個新列表,原列表保持不變。看示例:(1)對列表中的每項(xiàng)元素進(jìn)行立方運(yùn)算(變換功能)a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x ** 3 for x in a]
print(a)
print(b)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000](2)對列表中為偶數(shù)的元素進(jìn)行立方運(yùn)算(帶篩選條件的變換功能)a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x ** 3 for x in a if x % 2 == 0]
print(b)[8, 64, 216, 512, 1000]? ? ? ?從結(jié)果上可以看出有篩選條件的話是先篩選再變換,即先篩掉不滿足條件的元素,再進(jìn)行變換運(yùn)算。可以同時加多個篩選條件,如對大于5的且是偶數(shù)的元素進(jìn)行立方運(yùn)算,示例如下:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x ** 3 for x in a if x % 2 == 0 if x > 5]
print(b)[216, 512, 1000](3)與zip結(jié)合? ? ? ?將a,b兩個列表中相對應(yīng)得值組合起來,形成一個新列表。例如包含x坐標(biāo)的列表與y坐標(biāo)的列表形成相對應(yīng)的點(diǎn)坐標(biāo)[x, y]列表。a = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
xy = [[x, y] for x, y in zip(a, b)]
print(xy)[[-1, 1], [-2, 2], [-3, 3], [-4, 4], [-5, 5], [-6, 6], [-7, 7], [-8, 8], [-9, 9], [-10, 10]](4)支持多層for循環(huán)? ? ? ?將一個嵌套列表轉(zhuǎn)換成一個一維列表。a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [j for i in a for j in i]
print(b)[1, 2, 3, 4, 5, 6, 7, 8, 9]? ? ? ?Python中還有字典推導(dǎo)式、集合推導(dǎo)式等,與列表推導(dǎo)式使用方式大致相同。? ? ? ?列表推導(dǎo)式的使用非常廣泛,從實(shí)際使用經(jīng)驗(yàn)來看,列表推導(dǎo)式使用的頻率是非常高的,也是相當(dāng)好用的。而對于列表推導(dǎo)式的多層for循環(huán),尤其是3層以上的或帶復(fù)雜篩選條件的,犧牲了較多的可讀性,直接用多個普通for循環(huán)方式實(shí)現(xiàn)就可以了,畢竟方便的實(shí)現(xiàn)功能是第一位的,多幾行代碼就多幾行吧。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
b = [x ** 3 for x in a]
print(a)
print(b)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000](2)對列表中為偶數(shù)的元素進(jìn)行立方運(yùn)算(帶篩選條件的變換功能)a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x ** 3 for x in a if x % 2 == 0]
print(b)[8, 64, 216, 512, 1000]? ? ? ?從結(jié)果上可以看出有篩選條件的話是先篩選再變換,即先篩掉不滿足條件的元素,再進(jìn)行變換運(yùn)算。可以同時加多個篩選條件,如對大于5的且是偶數(shù)的元素進(jìn)行立方運(yùn)算,示例如下:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x ** 3 for x in a if x % 2 == 0 if x > 5]
print(b)[216, 512, 1000](3)與zip結(jié)合? ? ? ?將a,b兩個列表中相對應(yīng)得值組合起來,形成一個新列表。例如包含x坐標(biāo)的列表與y坐標(biāo)的列表形成相對應(yīng)的點(diǎn)坐標(biāo)[x, y]列表。a = [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
xy = [[x, y] for x, y in zip(a, b)]
print(xy)[[-1, 1], [-2, 2], [-3, 3], [-4, 4], [-5, 5], [-6, 6], [-7, 7], [-8, 8], [-9, 9], [-10, 10]](4)支持多層for循環(huán)? ? ? ?將一個嵌套列表轉(zhuǎn)換成一個一維列表。a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [j for i in a for j in i]
print(b)[1, 2, 3, 4, 5, 6, 7, 8, 9]? ? ? ?Python中還有字典推導(dǎo)式、集合推導(dǎo)式等,與列表推導(dǎo)式使用方式大致相同。? ? ? ?列表推導(dǎo)式的使用非常廣泛,從實(shí)際使用經(jīng)驗(yàn)來看,列表推導(dǎo)式使用的頻率是非常高的,也是相當(dāng)好用的。而對于列表推導(dǎo)式的多層for循環(huán),尤其是3層以上的或帶復(fù)雜篩選條件的,犧牲了較多的可讀性,直接用多個普通for循環(huán)方式實(shí)現(xiàn)就可以了,畢竟方便的實(shí)現(xiàn)功能是第一位的,多幾行代碼就多幾行吧。 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的Python的列表推导式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python几个简单好用的基础功能
- 下一篇: Python的序列切片