在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ Python內置函數(shù)map和filter的使用問題

Python內置函數(shù)map和filter的使用問題

剛開始學。在做一道練習題 題目是:

已知一個列表[1,2,3,4,5],將列表中每個元素都加1,并篩選出不能被2整除的數(shù)。

我的做法是:

因為查閱了相關資料。得知map函數(shù)返回的是一個object類型,所以在filter對上一個map的結果時采用了list()來轉換。

a_list = [1, 2, 3, 4, 5]
b_list = map(lambda x: x + 1, a_list)
print(list(b_list))
c_list = filter(lambda x: x % 2, list(b_list))
print(list(c_list))

可是控制臺的輸出是:

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

經過多次嘗試發(fā)現(xiàn)只有這樣才能成功輸出:

a_list = [1, 2, 3, 4, 5]
b_list = map(lambda x: x + 1, a_list)
print(list(b_list))
c_list = filter(lambda x: x % 2, map(lambda x: x + 1, a_list))
print(list(c_list))

這樣控制臺的輸出是:

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

是正確的。

我單獨對b_list做遍歷輸出也好,用list()轉換后輸出也好,輸出的內容都是空。
只有第一句

print(list(b_list))

才能輸出值

這是為什么呢。為什么第二次print(list(b_list))為空?
怎樣才能讓b_list的值一直存在?

回答
編輯回答
拼未來

這樣做就好了:

b_list = list(map(lambda x: x + 1, a_list))

在 Python 3+, 很多迭代過程在迭代時,會返回迭代對象自身, 這樣不用保存完整的列表,多數(shù)情況下可以節(jié)省內存的提高速度.

>>> b_list = map(lambda x: x + 1, a_list)
>>> print(b_list)
<map object at 0x7ff89514cac8>

map返回的是迭代對象, 這個迭代器只能迭代一次(list(b_list)),迭代完成就完了. 第二次list(b_list)執(zhí)行返回的是空. 但如果你把結果做為list放到內存里, 就沒有這個問題了,只是如果list很大的話,內存占用多,效率會下降,好的做是把這些操作串在一起, 一次完成.

2018年7月5日 07:31