Python嵌套列表的合并


Python中的嵌套列表是指多个列表相互嵌套,这在执行数据操作任务时非常有用;但是,有时我们可能希望更改或展平这种嵌套结构,用Python术语来说,就是将多个层次结构更改为单个(非嵌套)结构,其中所有元素都属于相同的范围,没有层次结构或层次结构。在本文中,我们将说明如何使用不同的方法在Python中合并嵌套列表。

使用递归方法在Python中合并嵌套列表

代码解释和设计步骤:

  • 步骤1导入所需的模块:我们从‘collections.abc’模块导入‘Iterable’类——iterable是Python的内置接口之一,它表示能够一次返回其成员的对象。

  • 步骤2定义一个展平列表的函数:flatten函数接受一个参数lst,其中包含要展平的列表;此函数将随后被重复调用到任何深度的集合上。

  • 步骤3迭代列表中的每个项目:‘for’循环迭代输入列表中的每个元素,其中item用作索引变量来表示当前哪个元素占主导地位。

  • 步骤4 − 判断一个项目是可迭代的,但不是字符串或字节。

  • 步骤5 − 定义一个嵌套列表:这将是要展平的列表。

  • 步骤6 − 调用Flatten函数并打印输出。

注意 − 此条件是关键,因为字符串和字节也可以被认为是可迭代的;但是,我们不希望那样对待它们,因为这会导致将字符串字符分解成单个字母。当项目满足此条件但不属于字符串或字节形式时,我们递归调用flatten以使用yield from语句在flatten函数对该项目调用的调用之间产生此调用的每个元素。

它可能会产生每个后续调用周期yield from语句的每个元素,yield from语句将返回这些递归调用的每个元素,yield from语句将产生此回调周期的每个元素,yield from语句在调用之间,这些调用的元素最终将递归地产生flatten函数对其自身对象调用的每个元素。如果可迭代项、字符串或字节与可迭代项不匹配,则产生它:在这种情况下,我们使用else子句并简单地按原样返回它包含的内容。

示例1

代码执行和实现:

from collections.abc import Iterable
# Importing the Iterable class from the collections.abc module.

def flatten(lst):
   # Defining a function named 'flatten' that takes a list as input.
    
   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]]
# A nested list to be flattened.
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中展平嵌套列表是指将子列表数组转换为无序的一维列表而不包含子列表的过程——这在涉及操作复杂或不必要的列表层次结构的数据操作任务中是一项宝贵的技能。它在简化操作方面特别有效,否则这些操作将涉及像这些嵌套子列表这样的广泛列表。

更新于:2023年10月18日

660 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告