Created
December 14, 2021 18:59
-
-
Save vrbadev/a202b641d3e424feb439f5c0d579dd9f to your computer and use it in GitHub Desktop.
Simple Python recursive function to flatten any iterable nested object to unit-depth iterable of desired type
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def flatten(*parents, dtype=tuple): | |
# internally, lists are used because they can be easily merged and expanded | |
result = list() | |
for i in range(len(parents)): | |
try: | |
# if i-th element iterable, use recursion to flatten all its elements and merge the result with current return list | |
result.extend(flatten(*parents[i], dtype=list)) | |
except TypeError: | |
# if not iterable, add the element to return list | |
result.append(parents[i]) | |
# transform to desired return type (dtype argument) | |
return dtype(result) | |
if __name__ == "__main__": | |
# example | |
import numpy as np | |
print(flatten([1], [2,[3]], 4, [[[5]],6,[7]], dtype=np.array)) # prints: array([1, 2, 3, 4, 5, 6, 7]) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment