扁平化嵌套列表

发布: (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 definitiondef flatten(nested_list): 定义了一个接受可能嵌套列表的函数。
  • Initialize resultresult = [] 创建一个空列表,用于收集展平后的元素。
  • Iteratefor item in nested_list: 循环遍历每个元素。
  • Check for sublistif isinstance(item, list): 判断当前元素是否本身是列表。
  • Recursive callflattened_sublist = flatten(item) 对子列表进行递归展平。
  • Extend resultresult.extend(flattened_sublist) 将展平后的元素添加到主结果列表中。
  • Handle non‑list itemselse: result.append(item) 直接追加非列表的原子元素。
  • Returnreturn result 返回完整的展平列表。

这个函数的美妙之处在于它的灵活性。得益于递归,它可以处理嵌套 2 层的列表,也可以处理深达 200 层的列表,逻辑完全相同!

感谢大家在我恢复期间的支持!我会尽快赶上更多挑战。祝编码愉快!💻

Back to Blog

相关文章

阅读更多 »

猴子市场

第1部分 另一个 math gauntlet,我要编写一系列 math operations。有些会出现在多个条件语句中。我以前做过,我有信心能做到……