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)了,有需要可以看看。

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 方法,但至于用法效率嘛,你可以自己探索一下
添加回答
舉報(bào)