Python Forum

Full Version: Flattening List
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Just a curious question, how would one flatten the following list [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]] ?
I think with zip().
Here is a recursive solution
from itertools import chain

def iflatten(seq):
    return chain.from_iterable(
        iflatten(x) if isinstance(x, list) else (x,) for x in seq)

def flatten(seq):
    return list(iflatten(seq))

if __name__ == '__main__':
    L = [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]]
    print(flatten(L))
Output:
[2, 4, 1, 3, 5, 7, 1, 10, 5, 5, 5, 4, 4, 4]
def flatten(list):
	flatted = []
	for element in list:
		if type(element) != type([]):
			flatted+=[element]
		else:
			flatted+=flatten(element)
	return flatted
A = [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]]
flatten(A)
codes with basic keywords and list operation only
Black magic:
>>> a = [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]]
>>> b = eval(repr(a).replace("[","").replace("]",""))
>>> b
(2, 4, 1, 3, 5, 7, 1, 10, 5, 5, 5, 4, 4, 4)
>>>
But, in all seriousness, don't do that.

eval is bad, you say? I know:
>>> a = [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]]
>>> b = list(map(int, repr(a).replace("[","").replace("]","").split(",")))
>>> b
[2, 4, 1, 3, 5, 7, 1, 10, 5, 5, 5, 4, 4, 4]
>>>
Don't do this either.
(Jan-25-2018, 11:14 PM)Mekire Wrote: [ -> ]Black magic:
There will be some trouble if the list contains literal strings instead of integers!
(Jan-25-2018, 11:18 PM)Gribouillis Wrote: [ -> ]
(Jan-25-2018, 11:14 PM)Mekire Wrote: [ -> ]Black magic:
There will be some trouble if the list contains literal strings instead of integers!
The dark arts can be cruel and unforgiving.
Teaching the Qliphoth is forbidden, my friends.
I want to break Python 2 support Evil bye using yield from.
def flatten(seq):
    for item in seq:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

lst = [[[2], [4, 1, 3]], [5, 7], 1, 10, [[[5, 5, 5], [4, 4, 4]]]]
print(list(flatten(lst)))
Output:
[2, 4, 1, 3, 5, 7, 1, 10, 5, 5, 5, 4, 4, 4]