Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Extracting inner most lists

Tags:

Just started toying around with Python so please bear with me :)

Assume the following list which contains nested lists:

[[[[[1, 3, 4, 5]], [1, 3, 8]], [[1, 7, 8]]], [[[6, 7, 8]]], [9]] 

In a different representation:

[     [         [             [                 [1, 3, 4, 5]             ],              [1, 3, 8]         ],          [             [1, 7, 8]         ]     ],      [         [             [6, 7, 8]         ]     ],      [9] ] 

How would you go about extracting those inner lists so that a result with the following form would be returned:

[[1, 3, 4, 5], [1, 3, 8], [1, 7, 8], [6, 7, 8], [9]] 

Many thanks!

EDIT (Thanks @falsetru):

Empty inner-list or mixed type lists will never be part of the input.

like image 311
Roi Tal Avatar asked Oct 21 '13 13:10

Roi Tal


1 Answers

This seems to work, assuming no 'mixed' lists like [1,2,[3]]:

def get_inner(nested):     if all(type(x) == list for x in nested):         for x in nested:             for y in get_inner(x):                 yield y     else:         yield nested 

Output of list(get_inner(nested_list)):

[[1, 3, 4, 5], [1, 3, 8], [1, 7, 8], [6, 7, 8], [9]] 

Or even shorter, without generators, using sum to combine the resulting lists:

def get_inner(nested):     if all(type(x) == list for x in nested):         return sum(map(get_inner, nested), [])     return [nested] 
like image 135
tobias_k Avatar answered Sep 28 '22 18:09

tobias_k