Is there a Mathematica function like inject in Ruby? For example, if I want the product of the elements in a list, in Ruby I can write:
list.inject(1) { |prod,el| prod * el }
I found I can just use Product in Mathematica:
Apply[Product, list]
However, this isn't general enough for me (like, if I don't just want the product or sum of the numbers). What's the closest equivalent to inject?
The equivalent is Fold. I think this is more typically called "reduce" -- that's the Python name anyway.
Translating your example:
Fold[#1*#2&, 1, list]
That #1*#2& is a binary lambda function that multiplies its arguments.
In this case you could just use Times instead:
Fold[Times, 1, list]
Or of course just apply Times to the list:
Apply[Times, list]
Or, for short:
Times @@ list
NOTE: The version in your question where you use Product instead of Times will not work. Product is for something else, namely the analog of Sum.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With