Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Flattening List
#1
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]]]] ?
Reply
#2
I think with zip().
Reply
#3
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]
Reply
#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
Reply
#5
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.
Reply
#6
(Jan-25-2018, 11:14 PM)Mekire Wrote: Black magic:
There will be some trouble if the list contains literal strings instead of integers!
Reply
#7
(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.
Reply
#8
Teaching the Qliphoth is forbidden, my friends.
Reply
#9
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]
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Flattening attribute access ruy 5 2,038 Jun-25-2021, 08:26 PM
Last Post: ruy
  Problem in flattening list Shahmadhur13 5 2,452 May-03-2020, 12:40 AM
Last Post: DeaD_EyE
  flattening a list with some elements being lists Skaperen 17 7,308 Apr-09-2019, 07:08 AM
Last Post: perfringo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020