Python中列表和列表列表的展平指南

将一个2D数组转换为1D数组被称为扁平化。解决这个问题有很多方法。

我们将在本教程中探索其中一些方法。

让我们看一个例子。

输入

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

输出

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#1. 循环

解决这个问题最常见的方法是使用循环。我想你们大多数人已经明白了。让我们看看使用循环解决问题的步骤。

  • 用虚拟数据初始化列表并将其命名为数据
  • 现在,初始化一个名为flat_list的空列表。
  • 迭代数据
    • 解包当前列表中的所有元素。
    • 使用列表添加方法将它们添加到flat_list中。
  • 打印结果。
  • 查看以下问题的代码。

    # 初始化数据和一个空列表
    data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
    flat_list = []
    
    # 迭代数据
    for item in data:
        # 将元素添加到flat_list中
        flat_list += item
    
    # 打印结果的flat_list
    print(flat_list)
    

    您可以使用另一个循环将子列表元素添加到flat_list 而不是使用连接运算符。我们还可以使用列表推导而不是循环。

    两者都可以完成相同的工作。让我们看看解决问题的下一种方法。

    #2. Itertools – Chain

    我们将使用itertools内置模块中的一个称为chain的方法。

    chain方法遍历每个子列表并返回元素,直到其中没有子列表为止。它返回一个可迭代对象,我们需要将其转换为列表。

    让我们看看解决问题的步骤。

    • 用虚拟数据初始化列表并将其命名为数据
    • 使用itertools.chain(*data)获取扁平化的可迭代对象。
    • 将结果可迭代对象转换为列表。
    • 打印扁平化列表。

    您可以在下面的代码段中查看代码。

    # 导入模块
    import itertools
    
    # 初始化数据
    data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
    
    # 扁平化列表并存储结果
    flat_list = itertools.chain(*data)
    
    # 将可迭代对象转换为列表并打印
    print(list(flat_list))

    #3. 扁平化多级列表

    我们已经了解了如何扁平化一个列表。我们讨论过的上述方法无法处理多级列表。让我们看一个例子。

    输入

    [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

    输出

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    由于在程序之前我们不知道列表的深度,所以我们必须使用递归来解决这个问题。

    • 根据示例将数据初始化为数据
    • 初始化一个名为flat_list的空列表。
    • 编写一个名为flatten_list的函数。
      • 遍历给定列表的元素。
      • 如果元素是一个列表,则递归调用相同的函数。
      • 如果元素不是一个列表,则将元素附加到flat_list
    • 使用数据调用该函数。
    • 函数将把所有元素填充到flat_list 列表中。
    • 打印flat_list以检查输出。
    • 哇!写这么多代码的步骤。别担心。将上述语句转换为代码不会超过几分钟。

      # 初始化数据和空列表
      data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
      flat_list = []
      
      # 函数
      def flatten_list(data):
          # 遍历数据
          for element in data:
              # 检查是否为列表
              if type(element) == list:
                  # 使用当前元素作为新参数调用相同的函数
                  flatten_list(element)
              else:
                  flat_list.append(element)
      
      # 展开给定的列表
      flatten_list(data)
      
      # 打印flat_list
      print(flat_list)

      记住,我们没有转换现有的列表。相反,我们创建了一个新列表,其中包含给定列表的元素。

      结论

      希望您喜欢这篇文章。在Python中,可能还有很多其他方法可以展平列表,但我认为上面的方法可能是最简单的。

      愉快编码 🙂

类似文章