第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python3.7 和 Python2.7 在使用 map 和 lambda 的問(wèn)題

Python3.7 和 Python2.7 在使用 map 和 lambda 的問(wèn)題

呼啦一陣風(fēng) 2019-03-14 22:03:51
下面是一段使用 split 分割字符串的代碼,分別使用 Python2.7 和 Python3.7 執(zhí)行def mySplit(s, cut):    data = [s]      for i in cut:                      t = []         map(lambda x: t.extend(x.split(i)), data)        data = t      return [i for i in data if i] s = 'ab;cd|efg|hi,,jkl|mn\topq;rst,uvw\txyz'print(mySplit(s, ',;|\t'))運(yùn)行結(jié)果:Geek-Mac:Downloads zhangyi$ python2.7 Nice.py  ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz'] Geek-Mac:Downloads zhangyi$ python3.7 Nice.py  [] Geek-Mac:Downloads zhangyi$由運(yùn)行結(jié)果可知, Python2.7 運(yùn)行正常,但是換成 Python3.7 執(zhí)行就出現(xiàn)了問(wèn)題。如果換成循環(huán)就正常執(zhí)行,我想知道是哪里出了問(wèn)題,是 map、lambda 還是其他的的問(wèn)題,望大神指點(diǎn),不吝指教,多謝!def mySplit(s, cut):    data = [s]      for i in cut:                      t = []                     for x in data:             t.extend(x.split(i))        data = t      return [i for i in data if i] s = 'ab;cd|efg|hi,,jkl|mn\topq;rst,uvw\txyz'print(mySplit(s, ',;|\t'))運(yùn)行結(jié)果:Geek-Mac:Downloads zhangyi$ python3.7 Nice.py  ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz'] Geek-Mac:Downloads zhangyi$ python2.7 Nice.py  ['ab', 'cd', 'efg', 'hi', 'jkl', 'mn', 'opq', 'rst', 'uvw', 'xyz'] Geek-Mac:Downloads zhangyi$
查看完整描述

2 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

原因是 Python3 里面 map 函數(shù)的返回值不再是一個(gè) list,而是一個(gè) map 對(duì)象,是一個(gè)迭代器。

迭代器是惰性計(jì)算的,因此除非調(diào)用迭代器,否則 lambda 函數(shù)根本沒(méi)有執(zhí)行。你可以這樣,把:

map(lambda x: t.extend(x.split(i)), data)

改成:

list(map(lambda x: t.extend(x.split(i)), data))

轉(zhuǎn)為list時(shí)要獲得所有元素,強(qiáng)制讓迭代器執(zhí)行。


其實(shí)你的需求,可以用 re.split 來(lái)做,這里就不展開(kāi)了,有需要可以看看。


查看完整回答
反對(duì) 回復(fù) 2019-03-14
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

這得從 python3 里的 map 的改動(dòng)說(shuō)起,在 python3 里,map 不再返回 list,而是返回了一個(gè)迭代器。迭代器有個(gè)特點(diǎn)是,某個(gè)元素是在你進(jìn)行迭代的時(shí)候計(jì)算的。所以,在你這種用法里,t.extend(x.split(i)) 根本沒(méi)有執(zhí)行,除非你改成

for _ in map(lambda x: t.extend(x.split(i)), data): pass

但這樣使用 map 不又多此一舉了么?

是的,在你的這個(gè)案例中,你不應(yīng)該用 map 的,而應(yīng)該用循環(huán)。


除此之外,還有一種比較便捷的方法,是使用 re 模塊的 split 方法,但至于用法效率嘛,你可以自己探索一下


查看完整回答
反對(duì) 回復(fù) 2019-03-14
  • 2 回答
  • 0 關(guān)注
  • 620 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)