📜  Python|压缩不同大小的列表

📅  最后修改于: 2022-05-13 01:55:38.870000             🧑  作者: Mango

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)]