244

I'm using Python 3.2. Tried this:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])

And got the following error:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined

Tried printing reduce into interactive console - got this error:

NameError: name 'reduce' is not defined


Is reduce really removed in Python 3.2? If that's the case, what's the alternative?

0

7 Answers 7

350

It was moved to functools.

Sign up to request clarification or add additional context in comments.

4 Comments

@julio.alegria: Because Guido hates it.
The article referenced in @IgnacioVazquez-Abrams makes some really good points about how most cases can be written in a more readable fashion. For me, it's by writing sum(item['key'] for item in list_of_dicts).
This should be in the core language
Yet another reason why "python" is not a stable language. First they had python2 and python3 that have intentionally incompatible print and now this!
279

You can add

from functools import reduce

before you use the reduce.

1 Comment

The previous user has already answered the question and the answer is same as that of his answer
10

Or if you use the six library

from six.moves import reduce

Comments

5

Reduce function is not defined in the Python built-in function. So first, you should import the reduce function

from functools import reduce

Comments

3

Use it like this.

# Use reduce function

from functools import reduce

def reduce_func(n1, n2):

    return n1 + n2


data_list = [2, 7, 9, 21, 33]

x = reduce(reduce_func, data_list)

print(x)

Comments

2

In this case I believe that the following is equivalent:

l = sum([1,2,3,4]) % 2

The only problem with this is that it creates big numbers, but maybe that is better than repeated modulo operations?

1 Comment

Repeated modulo operations are useful when it helps to keep numbers small. Summing numbers won't create large numbers unless you sum A LOT of numbers, so in this case it wouldn't help. Especially since not doing so allows the use of the built-in sum function, which will run much faster than repeated application of a user-defined function
1

you need to install and import reduce from functools python package

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.