在 Python 中合并嵌套列表
在 Python 中,嵌套列表是指多个列表相互嵌套,这在执行数据操作任务时非常有用;但是,有时我们可能希望通过"展平列表"来更改或展平此嵌套结构,在 Python 术语中,这意味着从多个层次结构更改为一个单一(非嵌套)结构,其中所有元素都属于相同范围,不存在层次结构。在本文中,我们将说明如何使用不同的方法在 Python 中合并嵌套列表。
使用递归方法在 Python 中合并嵌套列表
代码说明和设计步骤 −
步骤 1 − 导入所需模块:我们从 'collections.abc' 模块导入一个 'Iterable' 类 -iterable 是 Python 的内置接口之一,表示能够一次返回其成员的对象。
步骤 2 − 定义一个函数来展平列表:flatten 函数接受一个参数 lst,其中包含要展平的列表;然后将对具有任意深度的集合重复调用此函数。
步骤 3 - 遍历列表中的每个项目:"for" 循环遍历输入列表中的每个元素,该项目用作索引变量来表示哪个元素当前占主导地位。
步骤 4 - 确定某个项目是可迭代的,但不是字符串或字节。
步骤 5 - 定义嵌套列表:这将是要展平的列表。
步骤 6 - 调用 Flatten 函数并打印输出。
注意 - 这个条件很关键,因为字符串和字节也可以被视为可迭代的;但是,我们不希望这样处理它们,因为这会导致将字符串字符拆分成单个字母。当某个项目满足此条件但不属于字符串或字节形式时,我们会递归调用 flatten 以从此调出中产生每个元素,并在该项目的 flatten 函数调用之间使用来自语句的收益。
它可能会从每个后续调出循环中产生每个元素,收益来自语句将返回来自这些递归调用的每个元素,收益来自语句将产生来自此回调循环的每个元素,并在调用之间使用来自语句的收益,这些调用中的元素最终将产生来自该调出循环的每个元素,由 flatten 函数在其对象本身上递归调用。如果可迭代项、字符串或字节与可迭代项不匹配,则产生它:在这种情况下,我们使用 else 子句并直接返回其所包含的内容。
示例 1
代码执行和实现 −
from collections.abc import Iterable # 从 collections.abc 模块导入 Iterable 类。 def flatten(lst): # 定义一个名为"flatten"的函数,以列表作为输入。 for item in lst: if isinstance(item, Iterable) and not isinstance(item, (str, bytes)): yield from flatten(item) else: yield item nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 要展平的嵌套列表。 print(list(flatten(nested_list)))
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
使用列表推导方法合并 Python 中的嵌套列表
代码说明和设计步骤 −
步骤 1 − 在 Anaconda 提示符中打开 Jupyter Notebook 并开始在其单元格中编写代码。
步骤 2 − 创建一个名为 flatten() 的函数,列表包含一个名为 nested_list 的参数。
步骤 3 − 利用列表推导创建列表
步骤 4 −首先需要定义一个嵌套列表,然后根据您的个人需求和愿望进行更改。
步骤 5 - 我们针对原始嵌套列表运行 'flatten()' 函数并打印其结果,当使用"print 语句:原始嵌套列表中的所有元素..."打印时,应该会出现一个有序列表,其中包含按其出现顺序从所述原始列表中提取的元素,因为它们的顺序最初是定义的。
示例 2
代码执行和实现 -
def flatten(nested_list): return [item for sublist in nested_list for item in sublist] nested_list = [[1,2,3], [4,5,6], [7,8,9]] print(flatten(nested_list))
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
注意 - 此方法仅适用于具有一层嵌套的列表。如果其他列表包含进一步的嵌套,则此方法将无法完全展平它们 - 在这种情况下,如上所示的递归解决方案可能更合适。
结论
在本文中,我们使用两种不同的方法(例如递归和列表理解方法)合并 Python 中的嵌套列表。展平嵌套列表时可以应用这两种方法;最合适的选择将取决于您特定用例的嵌套级别。在 Python 中展平嵌套列表是指将子列表数组转换为无序的一维列表(没有子列表)的过程 - 这是涉及操作复杂或不必要的列表层次结构的数据操作任务中的一项宝贵技能。它在简化原本涉及大量列表(如这些嵌套子列表)的操作方面特别有效。