Flattening list in python
list, python
Solution
What `reduce` does, in plain English, is that it takes two things:
- A function `f` that:
- Accepts exactly 2 arguments
- Returns a value computed using those two values
- An iterable `iter` (e.g. a `list` or `str`)
`reduce` computes the result of `f(iter[0],iter[1])` (the first two items of the iterable), and keeps track of this value that was just computed (call it `temp`). `reduce` then computes `f(temp,iter[2])` and now keeps track of this new value. This process continues until every item in `iter` has been passed into `f`, and returns the final value computed.
The use of `*` in passing `*myList` into the `reduce` function is that it takes an iterable and turns it into multiple arguments. These two lines do the same thing:
myFunc(10,12)
myFunc(*[10,12])
In the case of `myList`, you're using a `list` that contains only exactly one `list` in it. For that reason, putting the `*` in front replaces `myList` with `myList[0]`.
Regarding compatibility, note that the `reduce` function works totally fine in Python 2, but in Python 3 you'll have to do this:
import functools
functools.reduce(some_iterable)
Problem
I have seen many posts regarding how to flatten a list in Python. But I was never able to understand how this is working: `reduce(lambda x,y:x+y,*myList)` Could someone please explain, how this is working: ``` >>> myList = [[[1,2,3],[4,5],[6,7,8,9]]] >>> reduce(lambda x,y:x+y,*myList) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> ``` Linked already posted : How to print list of list into one single list in python without using any for or while loop? Flattening a shallow list in Python Flatten (an irregular) list of lists If anybody thinks this is duplicate to other post, I'll remove it once I understood how it works. Thanks.