日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

一句话搞定python六剑客

發(fā)布時(shí)間:2025/4/5 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一句话搞定python六剑客 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

六劍客

一行搞定六劍客:三個(gè)函數(shù):map?filter?reduce?+?lambda?切片?推導(dǎo)列表

python最有特點(diǎn)的一行代碼,所有代碼均可以借用一行代碼(目標(biāo))

?

1.map(函數(shù),列表或者字符串)#字符串或者列表中每個(gè)字符或每個(gè)元素都帶入函數(shù)運(yùn)算

1.map函數(shù):

輸出結(jié)果為列表

1)列表元素的map運(yùn)算,

>>>?map(s,[1,2,3])

[2,?3,?4]

2)字符串元素的map運(yùn)算,函數(shù)用lambda實(shí)現(xiàn)

>>>?map(lambda?x:x.upper(),"abc")

['A',?'B',?'C']

3)函數(shù)自定義,應(yīng)用自定義函數(shù)套用將列表或字符串中每個(gè)元素輸出,

實(shí)例:自定義函數(shù)map

>>>?def?uppercase(s):

...?if?s>='A'?and?s<='Z':

...?return?s

...?else:

...?return?""

...

>>>?print?"".join(map(uppercase,"AABBabAN"))

AABBAN

?

實(shí)例:使用map函數(shù),將一個(gè)字符串中的小寫字母刪除掉,例如:“AABBaabb”,

結(jié)果返回"AABB"

?

def?delete_lowercase(s):

????if?s>='a'?and?s<="z":

????????return?""

????else:

????????return?s

?

print?"".join(map(delete_lowercase,"AABBaabb"))

>>>?"".join([i?for?i?in?map(lambda?x:(re.match(r"[ACDEFGHIJKLMNOPQRSTUVWXYZ]*",x).group()),"asdASD")?if?i!=""])

'ASD'、

2.filter?兩個(gè)參數(shù)(自定義函數(shù)名,列表)對(duì)列表中的元素過(guò)濾后輸出

?

filter實(shí)例:

>>>?def?uppercase(s):

...?if?s>='A'?and?s<='Z':

...?return?s

...?else:

...?return?""

...

>>>?print?"".join(map(uppercase,"AABBabAN"))

AABBAN

>>>?print?"".join(filter(uppercase,"AABBabFN"))

AABBFN

>>>

?

實(shí)例:

filter(lambda?x:x?in?string.uppercase,"AAaaSSBB")

?

reduce(lambda?x,y:x+y,range(1,101))

3、reduce (函數(shù)名,列表)將列表中的元素逐一累計(jì)

?

累加

>>>?print?reduce(lambda?x,y:x+y,range(1,101))

5050

階乘

>>>?print?reduce(lambda?x,y:x*y,range(1,5))

24

>>>?print?reduce(lambda?x,y:x*y,range(1,7))

720

實(shí)例:

list_a=[1,1,1,3,5,6,8]

func=lambda?x,y:x?if?y?in?x?else?x?+?[y]

print?reduce(func,[[],]+list_a)

?

4.lambda函數(shù),變量:運(yùn)算表達(dá)式:將變量按運(yùn)算表達(dá)式運(yùn)算后輸出

語(yǔ)法:變量:運(yùn)算表達(dá)式?如?x:x+1

?

引用:?函數(shù)名(變量賦值)?a(1)

>>>?a=lambda?x:x+1

>>>?a(4)

5

>>>?a=lambda?x,y,z:(x+y)*z

>>>?a(1,1,4)

8

>>>?a=lambda?x:s*x

>>>?s=1

>>>?a(5)

兩個(gè)參數(shù)lambda函數(shù)

import?string

fp?=?open("e:\\1.txt","w")

content=map(lambda?x,y:x+","+str(y)+"\n",list(string.lowercase),range(1,27))

fp.writelines(content)

?

list_a=[1,1,1,3,5,6,8]

func=lambda?x,y:x?if?y?in?x?else?x?+?[y]

print?reduce(func,[[],]+list_a)

5.推導(dǎo)列表?結(jié)果表達(dá)式+范圍+條件

?

[str(a)*i?for?i?in?range(1,times+1)]

實(shí)例:將列表中的每個(gè)元素變?yōu)橹貜?fù)字符串,如1?變?yōu)?a?2變?yōu)?aa?3變?yōu)閍aa

a=int(raw_input("input?a?value:"))

times=int(raw_input("input?count?times:"))

print?u"總和為:",eval("+".join([str(a)*i?for?i?in?range(1,times+1)]))

字符串轉(zhuǎn)換后?用+合并?并用eval?轉(zhuǎn)為求和

列表推導(dǎo)式是Python基礎(chǔ),好用,而又非常重要的功能,也是最受歡迎的Python特性之一,可以說(shuō)掌握它是成為合格Python程序員的基本標(biāo)準(zhǔn)。本質(zhì)上可以把列表推導(dǎo)式理解成一種集合了變換和篩選功能的函數(shù),通過(guò)這個(gè)函數(shù)把一個(gè)列表轉(zhuǎn)換成另一個(gè)列表。注意是另一個(gè)新列表,原列表保持不變。

看示例:

(1)對(duì)列表中的每項(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)對(duì)列表中為偶數(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)算。可以同時(shí)加多個(gè)篩選條件,如對(duì)大于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兩個(gè)列表中相對(duì)應(yīng)得值組合起來(lái),形成一個(gè)新列表。例如包含x坐標(biāo)的列表與y坐標(biāo)的列表形成相對(duì)應(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)

???????將一個(gè)嵌套列表轉(zhuǎn)換成一個(gè)一維列表。

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)來(lái)看,列表推導(dǎo)式使用的頻率是非常高的,也是相當(dāng)好用的。而對(duì)于列表推導(dǎo)式的多層for循環(huán),尤其是3層以上的或帶復(fù)雜篩選條件的,犧牲了較多的可讀性,直接用多個(gè)普通for循環(huán)方式實(shí)現(xiàn)就可以了,畢竟方便的實(shí)現(xiàn)功能是第一位的,多幾行代碼就多幾行吧。

實(shí)例:楊輝三角:

?#coding=utf-8

def?yhtriangle(n):

l=[1]

print?l

while?n>0:

?

l=[1]+[x+y?for?x,y?in?zip(l[:],l[1:])]+[1]

n-=1

?

print?l

?

yhtriangle(10)

6、切片

切片語(yǔ)法如下:

s[begin?:?end?:?stride]

與簡(jiǎn)單切片語(yǔ)法相比,擴(kuò)展切片只是增加了第3個(gè)參數(shù),即步長(zhǎng)參數(shù)(英文資料中通常稱為"stride"或"step")。

擴(kuò)展切片語(yǔ)法引入的"stride"參數(shù)是個(gè)需要特別注意的參數(shù),因?yàn)樗恼?負(fù)取值將會(huì)影響切片操作對(duì)源序列s的訪問(wèn)方向,而這正是本文開始那幾個(gè)示例可能引起Python新手困惑的原因。

其實(shí)規(guī)則很簡(jiǎn)單,說(shuō)穿不值一文錢:

1)?當(dāng)stride參數(shù)為正值(positive)時(shí),表明切片操作從左至右(即正向)訪問(wèn)源序列s的元素,此時(shí),若begin和end參數(shù)有缺省,則Python解釋器默認(rèn)將其設(shè)置為None。如s[0?:?:?1]會(huì)被解釋器當(dāng)作s[0?:?None?:?1],此時(shí),end實(shí)際取值要大于其有效索引范圍的上限值,以保證切片操作能訪問(wèn)到源序列s從begin開始的所有元素(從左向右)。

2)?當(dāng)stride參數(shù)為負(fù)值(negative)時(shí),表明切片操作從右至左(即逆向)訪問(wèn)源序列s的元素,此時(shí),若begin和end參數(shù)有缺省,則Python解釋器默認(rèn)將其設(shè)置為None。如s[-1?:?:?-1]會(huì)被解釋器當(dāng)作s[-1?:?None?:?-1],此時(shí),end實(shí)際取值要小于其有效索引范圍的下限值,已保證切片操作能訪問(wèn)到源序列s從begin開始的所有元素(逆向,從右向左)。

3)?無(wú)論stride參數(shù)取正值還是負(fù)值,切片表達(dá)式的begin和end索引值需要保證在切片操作的訪問(wèn)方向上,從begin到end之間有元素,這樣切片操作才能保證返回非空集。

s[4,8,1]

?切片實(shí)例:

import?os

os.system("ls?-al?>?a.txt")

with?open("a.txt")?as?fp:

????for?i?in?fp:

????????if?"1.py"?in?i:

????????????print?i.split()[-2]#倒數(shù)第二位

????????????break

?

>>>?l=[1,2,3,4,5,6]

>>>?l[:]

[1,?2,?3,?4,?5,?6]

>>>?l[1:]

[2,?3,?4,?5,?6]

l[:]

l[1:]

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zyy98877/p/8490942.html

總結(jié)

以上是生活随笔為你收集整理的一句话搞定python六剑客的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。