Python – Equivalent for inject() in Python


In Ruby, I'm used to using Enumerable#inject for going through a list or other structure and coming back with some conclusion about it. For example,

[1,3,5,7].inject(true) {|allOdd, n| allOdd && n % 2 == 1}

to determine if every element in the array is odd. What would be the appropriate way to accomplish the same thing in Python?

Best Solution

To determine if every element is odd, I'd use all()

def is_odd(x): 
    return x%2==1

result = all(is_odd(x) for x in [1,3,5,7])

In general, however, Ruby's inject is most like Python's reduce():

result = reduce(lambda x,y: x and y%2==1, [1,3,5,7], True)

all() is preferred in this case because it will be able to escape the loop once it finds a False-like value, whereas the reduce solution would have to process the entire list to return an answer.