Flattening Techniques
Introduction to Flattening
Flattening is the process of converting nested iterables into a single-level structure, making data more accessible and easier to manipulate.
Flattening Methods
graph TD
A[Flattening Techniques] --> B[List Comprehension]
A --> C[Recursive Methods]
A --> D[Itertools]
A --> E[Numpy Flatten]
1. List Comprehension Approach
## Simple nested list flattening
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list) ## Outputs: [1, 2, 3, 4, 5, 6, 7, 8, 9]
2. Recursive Flattening
def flatten_recursive(nested_list):
flat_list = []
for item in nested_list:
if isinstance(item, list):
flat_list.extend(flatten_recursive(item))
else:
flat_list.append(item)
return flat_list
complex_list = [1, [2, 3, [4, 5]], 6]
print(flatten_recursive(complex_list)) ## Outputs: [1, 2, 3, 4, 5, 6]
import itertools
nested_list = [[1, 2], [3, 4], [5, 6]]
flat_list = list(itertools.chain(*nested_list))
print(flat_list) ## Outputs: [1, 2, 3, 4, 5, 6]
Flattening Comparison
Method |
Complexity |
Flexibility |
Performance |
List Comprehension |
Simple |
Limited |
Fast |
Recursive |
Complex |
High |
Slower |
Itertools |
Moderate |
Moderate |
Efficient |
Advanced Flattening Techniques
Handling Mixed Nested Structures
def advanced_flatten(nested_structure):
def _flatten(item):
if isinstance(item, (list, tuple)):
for sub_item in item:
yield from _flatten(sub_item)
else:
yield item
return list(_flatten(nested_structure))
mixed_list = [1, [2, 3, (4, 5)], 6]
print(advanced_flatten(mixed_list)) ## Outputs: [1, 2, 3, 4, 5, 6]
- Choose flattening method based on data structure
- Consider memory and computational complexity
- Use built-in methods for better performance
Best Practices
- Understand your data structure
- Select appropriate flattening technique
- Test performance with large datasets
LabEx recommends practicing these techniques to master nested iterable manipulation.