如何在Python中压缩两个列表列表?
普通的 zip函数允许我们聚合容器中的值。但有时,我们需要有多个列表并包含列表作为索引元素,我们需要将它们合并/压缩在一起。这是一个非常罕见的问题,但它的解决方案仍然很方便。让我们讨论可以设计解决方案的某些方法。
方法 #1:使用map() + __add__
这个问题可以使用带有加法运算的map函数来解决。 map函数执行与 zip函数类似的函数,在这种情况下可以帮助找到解决方案。
# Python3 code to demonstrate
# zipping lists of lists
# using map() + __add__
# initializing lists
test_list1 = [[1, 3], [4, 5], [5, 6]]
test_list2 = [[7, 9], [3, 2], [3, 10]]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using map() + __add__
# zipping lists of lists
res = list(map(list.__add__, test_list1, test_list2))
# printing result
print ("The modified zipped list is : " + str(res))
输出 :
The original list 1 is : [[1, 3], [4, 5], [5, 6]]
The original list 2 is : [[7, 9], [3, 2], [3, 10]]
The modified zipped list is : [[1, 3, 7, 9], [4, 5, 3, 2], [5, 6, 3, 10]]
方法 #2:使用itertools.chain() + zip()
这两个功能的组合可用于执行此特定任务。可以使用chain函数进行interlist聚合,intralist聚合是通过zip函数完成的。
# Python3 code to demonstrate
# zipping lists of lists
# using map() + __add__
import itertools
# initializing lists
test_list1 = [[1, 3], [4, 5], [5, 6]]
test_list2 = [[7, 9], [3, 2], [3, 10]]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using map() + __add__
# zipping lists of lists
res = [list(itertools.chain(*i))
for i in zip(test_list1, test_list2)]
# printing result
print ("The modified zipped list is : " + str(res))
输出 :
The original list 1 is : [[1, 3], [4, 5], [5, 6]]
The original list 2 is : [[7, 9], [3, 2], [3, 10]]
The modified zipped list is : [[1, 3, 7, 9], [4, 5, 3, 2], [5, 6, 3, 10]]