扁平化嵌套列表
发布: (2025年12月8日 GMT+8 18:55)
3 min read
原文: Dev.to
Source: Dev.to
大家好!👋
我知道最近我有点沉默。上周我得了相当严重的流感,整个人都倒下了。🤒 这也是我错过发布编程挑战的原因。现在我感觉好一点了,准备重新投入工作!
Problem Statement
目标是编写一个函数,接受一个可能包含其他列表的列表(嵌套深度任意),并将其转换为一个单一的、一维列表。
Examples
flatten([[1, 2], [3, 4], [5, 6]]) # → [1, 2, 3, 4, 5, 6]
flatten([1, [2, 3], [[4, 5], 6]]) # → [1, 2, 3, 4, 5, 6]
Solution
下面是使用递归的 Python 实现。递归在这里非常合适,因为我们并不知道嵌套的深度!
def flatten(nested_list):
"""
Flattens a nested list into a single-level list.
"""
result = []
for item in nested_list:
if isinstance(item, list):
flattened_sublist = flatten(item) # Recursively flatten the sublist
result.extend(flattened_sublist)
else:
result.append(item)
return result
# Test cases
print(flatten([[1, 2], [3, 4], [5, 6]]))
# Output: [1, 2, 3, 4, 5, 6]
print(flatten([1, [2, 3], [[4, 5], 6]]))
# Output: [1, 2, 3, 4, 5, 6]
Explanation
- Function definition –
def flatten(nested_list):定义了一个接受可能嵌套列表的函数。 - Initialize result –
result = []创建一个空列表,用于收集展平后的元素。 - Iterate –
for item in nested_list:循环遍历每个元素。 - Check for sublist –
if isinstance(item, list):判断当前元素是否本身是列表。 - Recursive call –
flattened_sublist = flatten(item)对子列表进行递归展平。 - Extend result –
result.extend(flattened_sublist)将展平后的元素添加到主结果列表中。 - Handle non‑list items –
else: result.append(item)直接追加非列表的原子元素。 - Return –
return result返回完整的展平列表。
这个函数的美妙之处在于它的灵活性。得益于递归,它可以处理嵌套 2 层的列表,也可以处理深达 200 层的列表,逻辑完全相同!
感谢大家在我恢复期间的支持!我会尽快赶上更多挑战。祝编码愉快!💻