I want to flatten the list:
exampleArray = [[[151.68694121866872]],
[[101.59534468349297]],
[[72.16055999176308]]]
How about
result = [x[0][0] for x in exampleArray]
In [6]: from itertools import chain
In [7]: lis=[[[151.68694121866872]], [[101.59534468349297]], [[72.16055999176308]]]
In [8]: list(chain(*(chain(*lis))))
Out[8]: [151.68694121866872, 101.59534468349297, 72.16055999176308]
There isn't a better way, this is the most recommended way. See official recipes
def flatten(listOfLists):
"Flatten one level of nesting"
return chain.from_iterable(listOfLists)
You don't need to convert the itertools.chain
object (an iterable) into a list:
resultArray= list(chain.from_iterable(list(chain.from_iterable(exampleArray))))
# could be rewritten as
resultArray= list(chain.from_iterable(chain.from_iterable(exampleArray)))
.
You could write a deepness function using recursion:
def deep_chain_from_iterable(it, n):
if n == 0:
return list(it)
else:
return deep_chain_from_iterable(itertools.chain.from_iterable(it),n-1)
deep_chain_from_iterable(exampleArray, 2)
For fixed level of depth (as in example) you can just sum enough times:
sum(sum(listoflistsoflists, []), [])