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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Python 3中使用過濾器、映射和精簡

如何在Python 3中使用過濾器、映射和精簡

眼眸繁星 2019-07-11 15:30:26
如何在Python 3中使用過濾器、映射和精簡filter, map,和reduce在Python 2中很好地工作。下面是一個例子:>>> def f(x):         return x % 2 != 0 and x % 3 != 0>>> filter(f, range(2, 25))[5, 7, 11, 13, 17, 19, 23]>>> def cube(x):         return x*x*x>>> map(cube, range(1, 11))[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]>>> def add(x,y):         return x+y>>> reduce(add, range(1, 11))55但是在Python 3中,我收到以下輸出:>>> filter(f, range(2, 25))<filter object at 0x0000000002C14908>>>> map(cube, range(1, 11)) <map object at 0x0000000002C82B70>>>> reduce(add, range(1, 11))Traceback (most recent call last):   File "<pyshell#8>", line 1, in <module>     reduce(add, range(1, 11))NameError: name 'reduce' is not defined如果有人能向我解釋這是為什么,我將不勝感激。
查看完整描述

3 回答

?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個贊

您可以在Python3.0的新特性是什么?..當(dāng)你從2.x移到3.x時,你應(yīng)該徹底閱讀它,因?yàn)楹芏鄸|西都變了。

這里的全部答案是引用文檔的話。

視圖和迭代器而不是列表

一些著名的API不再返回列表:

  • [...]

  • map()

    filter()

    返回迭代器。如果你真的需要一個清單,一個快速的解決辦法是。

    list(map(...))

    但是更好的解決方法通常是使用列表理解(特別是當(dāng)原始代碼使用lambda時),或者重寫代碼,這樣它就根本不需要列表了。特別棘手的是

    map()

    為函數(shù)的副作用調(diào)用;正確的轉(zhuǎn)換是使用常規(guī)的

    for

    循環(huán)(因?yàn)閯?chuàng)建一個列表只是浪費(fèi))。
  • [...]

內(nèi)建

  • [...]

  • 移除

    reduce()

    ..使用

    functools.reduce()

    如果您真的需要它,但是99%的時間是顯式的

    for

    循環(huán)更易讀。
  • [...]


查看完整回答
反對 回復(fù) 2019-07-11
?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊

的功能map和filter被有意更改為返回迭代器,并從內(nèi)置并放置在functools.reduce.


所以,為了filter和map,你可以用list()像你以前一樣看到結(jié)果。


>>> def f(x): return x % 2 != 0 and x % 3 != 0

...

>>> list(filter(f, range(2, 25)))

[5, 7, 11, 13, 17, 19, 23]

>>> def cube(x): return x*x*x

...

>>> list(map(cube, range(1, 11)))

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>> import functools

>>> def add(x,y): return x+y

...

>>> functools.reduce(add, range(1, 11))

55

>>>

現(xiàn)在的建議是用生成器、表達(dá)式或列表理解替換對map和Filter的使用。例子:


>>> def f(x): return x % 2 != 0 and x % 3 != 0

...

>>> [i for i in range(2, 25) if f(i)]

[5, 7, 11, 13, 17, 19, 23]

>>> def cube(x): return x*x*x

...

>>> [cube(i) for i in range(1, 11)]

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>>

他們說循環(huán)是99%的時間容易讀比減少,但我只堅持functools.reduce.


99%的數(shù)字直接從Python3.0的新特性是什么?書名:Guido van Rossum.

查看完整回答
反對 回復(fù) 2019-07-11
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個贊

作為對其他答案的補(bǔ)充,這聽起來像是上下文管理器的一個很好的用例,它將把這些函數(shù)的名稱重新映射到返回列表并引入的函數(shù)。reduce在全局命名空間中。

快速實(shí)現(xiàn)可能如下所示:

from contextlib import contextmanager    

@contextmanagerdef noiters(*funcs):
    if not funcs: 
        funcs = [map, filter, zip] # etc
    from functools import reduce
    globals()[reduce.__name__] = reduce    for func in funcs:
        globals()[func.__name__] = lambda *ar, func = func, **kwar: list(func(*ar, **kwar))
    try:
        yield
    finally:
        del globals()[reduce.__name__]
        for func in funcs: globals()[func.__name__] = func

其用法如下所示:

with noiters(map):
    from operator import add    print(reduce(add, range(1, 20)))
    print(map(int, ['1', '2']))

其中的指紋:

190[1, 2]

只是我的兩分錢:-)


查看完整回答
反對 回復(fù) 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 597 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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