373 Stimmen

Verwendung von Filter, Map und Reduce in Python 3

filter , map et reduce funktionieren perfekt in Python 2. Hier ist ein Beispiel:

>>> 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

In Python 3 erhalte ich jedoch die folgenden Ausgaben:

>>> 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

Ich wäre dankbar, wenn mir jemand erklären könnte, warum das so ist.

Screenshot des Codes zur weiteren Verdeutlichung:

IDLE sessions of Python 2 and 3 side-by-side

2voto

Golden Lion Punkte 2590
from functools import reduce

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

print(*filter(f, range(2, 25)))
#[5, 7, 11, 13, 17, 19, 23]

def cube(x):
    return x**3
print(*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

Es funktioniert so wie es ist. Um die Ausgabe von map zu erhalten, verwenden Sie * oder list

0voto

Yogendra Singh Punkte 1829

Hier sind die Beispiele für Filter-, Map- und Reduce-Funktionen.

Zahlen = [10,11,12,22,34,43,54,34,67,87,88,98,99,87,44,66]

//Filter

oddNumbers = list(filter(lambda x: x%2 != 0, numbers))

print(ungeradeZahlen)

//Karte

multiplyOf2 = list(map(lambda x: x*2, numbers))

print(multiplyOf2)

//Reduzieren

Die Funktion reduce wurde in Python 3 aus den eingebauten Funktionen entfernt, da sie nicht häufig verwendet wird. Sie ist immer noch im Modul functools verfügbar, so dass Sie sie verwenden können:

from functools importieren reduzieren

sumOfNumbers = reduce(lambda x,y: x+y, numbers)

print(sumOfNumbers)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X