4

I have a list which consists of many lists. Here is an example,

[
    [Obj, Obj, Obj, Obj],
    [Obj],
    [Obj],
    [
        [Obj,Obj],
        [Obj,Obj,Obj]
    ]
]

Is there a way to join all these items together as one list, so the output will be something like

[Obj,Obj,Obj,Obj,Obj,Obj,Obj,Obj,Obj,Obj,Obj]
Karl Knechtel
  • 62,466
  • 11
  • 102
  • 153
dotty
  • 40,405
  • 66
  • 150
  • 195

2 Answers2

7

Yes, here's one way to do it:

def flatten(lst):
    for elem in lst:
        if type(elem) in (tuple, list):
            for i in flatten(elem):
                yield i
        else:
            yield elem

Please note, this creates a generator, so if you need a list, wrap it in list():

flattenedList = list(flatten(nestedList))
Skilldrick
  • 69,215
  • 34
  • 177
  • 229
1

Stolen from MonkeySage, here:

def iter_flatten(iterable):
  it = iter(iterable)
  for e in it:
    if isinstance(e, (list, tuple)):
      for f in iter_flatten(e):
        yield f
    else:
      yield e
Oddthinking
  • 24,359
  • 19
  • 83
  • 121