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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

1.8推导式

發(fā)布時(shí)間:2023/11/28 生活经验 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.8推导式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
列表推導(dǎo)式
列表推導(dǎo)式,生成器表達(dá)式以及其他推導(dǎo)式,首先我們先看一下這樣的代碼,給出一個(gè)列表,通過(guò)循環(huán),想列表中添加1~10:
li = []
for i in range(10):li.append(i)
print(li)

列表推導(dǎo)式的常?語(yǔ)法:

[結(jié)果 for 變量 in 可迭代對(duì)象]

ls = [i for i in range(10)]
print(ls)

列表推導(dǎo)式是通過(guò)?行來(lái)構(gòu)建你要的列表, 列表推導(dǎo)式看起來(lái)代碼簡(jiǎn)單. 但是出現(xiàn)錯(cuò)誤之后很難排查.

lst = ['python%s' % i for i in range(1,19)]
print(lst)

篩選模式

語(yǔ)法:

[結(jié)果 for 變量 in 可迭代對(duì)象 if 條件]

lst = [i for i in range(100) if i %2 == 0]
print(lst)

生成器推導(dǎo)式

生成器表達(dá)式和列表推導(dǎo)式的語(yǔ)法基本上一樣的,只是把[]換成()
gen = (i for i in range(10))
print(gen)
# 結(jié)果: <generator object <genexpr> at 0x0000026046CAEBF8>

打印的結(jié)果就是一個(gè)生成器,我們可以使用for循環(huán)來(lái)循環(huán)這個(gè)生成器

gen = ("第%s次" % i for i in range(10))
for i in gen:print(i)

生成器表達(dá)式也可以進(jìn)行篩選

# 獲取1-100內(nèi)能被3整除的數(shù)
gen = (i for i in range(1,100) if i % 3 == 0)
for num in gen:print(num)
# 100以內(nèi)能被3整除的數(shù)的平?
gen = (i * i for i in range(100) if i % 3 == 0)
for num in gen:print(num)
# 尋找名字中帶有兩個(gè)e的人的名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# 不用推導(dǎo)式和表達(dá)式
result = []
for first in names:for name in first:if name.count("e") >= 2:result.append(name)
print(result)
# 推導(dǎo)式
gen = (name for first in names for name in first if name.count('e') >= 2)
for i in gen:print(i)

可以把生成器里面的值通過(guò)某些方法變成一個(gè)容器

li = []
gen = (i for i in range(1, 100) if i % 3 == 0)
for num in gen:# print(num)li.append(num)
print(li)

生成器表達(dá)式和列表推導(dǎo)式的區(qū)別:

1.列表推導(dǎo)式比較耗內(nèi)存,一次性加載.生成器表達(dá)式幾乎不占用內(nèi)存.使用的時(shí)候才分配和使用內(nèi)存

2.得到的值不一樣,列表推導(dǎo)式得到的是一個(gè)列表.生成器表達(dá)式獲取的是一個(gè)生成器

實(shí)例:

def func():print(111)yield 222
g = func()  # 生成器g
g1 = (i for i in g) # 生成器g1. 但是g1的數(shù)據(jù)來(lái)源于g
g2 = (i for i in g1)    # 生成器g2. 來(lái)源g1
# list的底層有for循環(huán),for就是一直執(zhí)行__next__() 所以可以將生成器放到list中
print(list(g))   # 獲取g中的數(shù)據(jù). 這時(shí)func()才會(huì)被執(zhí)行. 打印111.獲取到222. g完畢.
print(list(g1))  # 獲取g1中的數(shù)據(jù). g1的數(shù)據(jù)來(lái)源是g. 但是g已經(jīng)取完了. g1 也就沒(méi)有數(shù)據(jù)了
print(list(g2))  # 和g1同理理
print(next(g))
print(next(g1))
print(next(g2))   # 可以用next來(lái)驗(yàn)證  其實(shí)list就是將內(nèi)容迭代了轉(zhuǎn)換成了列表

每次對(duì)生成器調(diào)用 next() 時(shí),它會(huì)從上次離開(kāi)位置恢復(fù)執(zhí)行(它會(huì)記住上次執(zhí)行語(yǔ)句時(shí)的所有數(shù)據(jù)值)。

字典推導(dǎo)式

根據(jù)名字應(yīng)該也能猜到,推到出來(lái)的是字典

lst1 = ['jay','jj','meet']
lst2 = ['周杰倫','林俊杰','郭寶元']
dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
print(dic)

升級(jí)版:

{key:value for key value in d.iterms()}

集合推導(dǎo)式

集合推導(dǎo)式可以幫我們直接生成一個(gè)集合,集合的特點(diǎn);無(wú)序,不重復(fù) 所以集合推導(dǎo)式自帶去重功能

lst = [1,2,3,-1,-3,-7,9]
s = {abs(i) for i in lst}
print(s)

總結(jié):

推導(dǎo)式有, 列表推導(dǎo)式, 字典推導(dǎo)式, 集合推導(dǎo)式, 沒(méi)有元組推導(dǎo)式

生成器表達(dá)式: (結(jié)果 for 變量 in 可迭代對(duì)象 if 條件篩選)

生成器表達(dá)式可以直接獲取到?成器對(duì)象. ?成器對(duì)象可以直接進(jìn)行for循環(huán). ?成器具有惰性機(jī)制.

集合推導(dǎo)式和字典推導(dǎo)式很是類(lèi)似,記住一個(gè)小技巧能夠快速區(qū)分那個(gè)是字典那個(gè)是集合

字典推導(dǎo)式前面的結(jié)果是有個(gè)冒號(hào),而集合的前面結(jié)果就是單純的結(jié)果

總結(jié)

以上是生活随笔為你收集整理的1.8推导式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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