Python|压缩不同大小的列表
在Python中,压缩是一种实用程序,我们将一个列表与另一个列表配对。通常,只有在要压缩的两个列表大小相同的情况下,此任务才会成功。但有时我们需要压缩不同大小的列表。让我们讨论如果发生此问题可以解决的某些方法。
方法 #1:使用enumerate()
+ 循环
这就是我们使用蛮力方法来完成这个特定任务的方式。在这个过程中,我们循环列表,当一个比另一个大时,我们循环元素以从头开始。
# Python3 code to demonstrate
# zipping of two different size list
# using enumerate() + loop
# initializing lists
test_list1 = [7, 8, 4, 5, 9, 10]
test_list2 = [1, 5, 6]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using enumerate() + loop
# zipping of two different size list
res = []
for i, j in enumerate(test_list1):
res.append((j, test_list2[i % len(test_list2)]))
# printing result
print ("The zipped list is : " + str(res))
输出:
The original list 1 is : [7, 8, 4, 5, 9, 10]
The original list 2 is : [1, 5, 6]
The zipped list is : [(7, 1), (8, 5), (4, 6), (5, 1), (9, 5), (10, 6)]
方法#2:使用itertools.cycle()
这是执行此特定任务的另一种方法,在此我们循环较小的列表,以便它可以从头开始压缩,以防使用 zip函数耗尽较小的列表。
# Python3 code to demonstrate
# zipping of two different size list
# using itertools.cycle()
from itertools import cycle
# initializing lists
test_list1 = [7, 8, 4, 5, 9, 10]
test_list2 = [1, 5, 6]
# printing original lists
print ("The original list 1 is : " + str(test_list1))
print ("The original list 2 is : " + str(test_list2))
# using itertools.cycle()
# zipping of two different size list
res = list(zip(test_list1, cycle(test_list2))
if len(test_list1) > len(test_list2)
else zip(cycle(test_list1), test_list2))
# printing result
print ("The zipped list is : " + str(res))
输出:
The original list 1 is : [7, 8, 4, 5, 9, 10]
The original list 2 is : [1, 5, 6]
The zipped list is : [(7, 1), (8, 5), (4, 6), (5, 1), (9, 5), (10, 6)]