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.

Original source

Related problems