如何在 Python 中压缩两个列表列表?


可以使用 zip() 函数在 Python 中合并两个列表列表。当处理表格数据或多维数据时,合并两个列表列表尤其有用,因为它允许组合来自不同来源的相关信息。zip() 函数是 Python 中一个强大的内置工具,它通过配对子列表中的对应元素并生成一个新列表来促进此过程。在本文中,我们将探讨如何使用 zip() 函数在 Python 中压缩两个列表列表。

算法

压缩两个列表列表的通用算法如下:

  • 创建两个列表列表,list1 和 list2,它们具有相同数量的子列表。

  • 初始化一个空列表 zipped_list,用于存储压缩结果。

  • 使用 zip() 函数迭代 list1 和 list2 中对应的子列表。

  • 对于每次迭代,再次使用 zip() 函数将子列表压缩在一起。

  • 将压缩的结果转换为列表并将其添加到 zipped_list。

  • 对 list1 和 list2 中的所有子列表重复步骤 3-5。

  • 返回 zipped_list 作为最终结果。

方法 1:使用 Zip() 函数

语法

zip(*iterables)

在这里,zip() 函数将多个可迭代对象作为参数,并返回一个包含来自每个可迭代对象的元素的元组迭代器。

示例 1:压缩两个长度相等的列表

在下面的示例中,我们有两个列表 list1 和 list2,每个列表都包含三个子列表。zip() 函数用于迭代 list1 和 list2 中对应的子列表。对于每次迭代,子列表都使用 zip() 函数再次压缩在一起。压缩的结果被转换为列表并存储在 zipped_list 中。

list1 = [[1, 2], [3, 4], [5, 6]]
list2 = [['a', 'b'], ['c', 'd'], ['e', 'f']]

zipped_list = [list(zip(sublist1, sublist2)) for sublist1, sublist2 in zip(list1, list2)]

print(zipped_list)

输出

[[(1, 'a'), (2, 'b')], [(3, 'c'), (4, 'd')], [(5, 'e'), (6, 'f')]]

示例 2:压缩两个长度不同的列表

在下面的示例中,我们有两个列表 list1 和 list2,但第二个列表只有两个子列表而不是三个。zip() 函数只迭代两个列表都拥有的子列表数量。在这种情况下,它只会压缩来自两个列表的前两个子列表。

list1 = [[1, 2], [3, 4], [5, 6]]
list2 = [['a', 'b'], ['c', 'd']]

zipped_list = [list(zip(sublist1, sublist2)) for sublist1, sublist2 in zip(list1, list2)]

print(zipped_list)

输出

[[(1, 'a'), (2, 'b')], [(3, 'c'), (4, 'd')]]

示例 3:压缩两个空列表

在下面的示例中,list1 和 list2 都是空列表。由于没有子列表要压缩,因此生成的 zipped_list 也将为空。

list1 = []
list2 = []

zipped_list = [list(zip(sublist1, sublist2)) for sublist1, sublist2 in zip(list1, list2)]

print(zipped_list)

输出

[ ]

方法 2:使用列表推导式和 zip() 方法

列表推导式提供了一种基于现有列表或其他可迭代对象创建列表的简洁方法。通过在列表推导式中包含 zip(),我们可以同时迭代多个列表中的对应元素,并生成一个具有所需合并结构的新列表。

语法

merged_list = [expression for sublist1, sublist2 in zip(list1, list2)]

这里的参数如下:

  • list1list2 是我们要合并的两个列表列表。

  • sublist1sublist2 表示当我们使用 zip() 迭代时来自 list1 和 list2 的对应子列表。

  • expression 是我们要应用于 sublist1 和 sublist2 的对应元素的操作或转换,以在 merged_list 中创建合并的元素。

示例

在下面的示例中,我们有两个列表 list1 和 list2,每个列表都包含三个子列表。通过结合使用列表推导式和 zip(),我们可以迭代对应的子列表并使用 + 运算符将它们合并在一起。生成的 merged_list 包含来自两个列表的组合元素。

list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list2 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

merged_list = [sublist1 + sublist2 for sublist1, sublist2 in zip(list1, list2)]
print(merged_list)

输出

[[1, 2, 3, 'a', 'b', 'c'], [4, 5, 6, 'd', 'e', 'f'], [7, 8, 9, 'g', 'h', 'i']]

结论

在本文中,我们讨论了如何使用 zip() 方法在 Python 中压缩两个列表列表。通过将 zip() 函数与列表推导式结合使用,我们可以迭代对应的子列表并将它们压缩到一个新列表中。需要注意的是,zip() 函数在到达较短列表的末尾时会停止压缩。因此,如果您想压缩所有子列表,则必须确保两个列表具有相同数量的子列表。

更新于:2023年10月16日

2K+ 浏览量

启动您的 职业生涯

完成课程获得认证

开始
广告