I have a Python list/array of really messy lists/arrays that either contains a list, array, or an empty list/array. Is there a simple operation I can use to completely flatten it to return me a 1D array?
Here would be an example that might not be correct
a = np.array([[1,2,3],
[],
[np.array([1,2,3])],
[np.array([1,2,[]])]])
I say might not be correct because I cant think of a way to make it even messier. There would only be numbers in the data. No strings etc.
But all I need is to convert it to a 1D array where each entry contains a single value; neither a list nor an array. Is there such a function or do I need to iterate the the array and do a check for every element?
>Solution :
You could write a recursive function that goes through the nested iterable items to flatten the structure:
def flatten(a):
try:
return [item for flat in map(flatten,a) for item in flat]
except:
return [a]
ouput:
import numpy as np
a = np.array([[1,2,3],
[],
[np.array([1,2,3])],
[np.array([1,2,[]])]])
print(flatten(a))
[1, 2, 3, 1, 2, 3, 1, 2]