📜  Python|交错多个相同长度的列表

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

Python|交错多个相同长度的列表

给定相同长度的列表,编写一个Python程序将给定列表的替代元素存储在一个新列表中。

让我们讨论可以执行此操作的某些方式。

方法 #1:使用map() + list comprehension
map()用于处理列表的交错,交替插入的任务由简写代码的列表理解部分执行。仅适用于Python 2。

# Python2 code to demonstrate 
# to interleave lists
# using map() + list comprehension
  
# initializing lists 
test_list1 = [1, 4, 5]
test_list2 = [3, 8, 9]
  
# printing original lists
print ("Original list 1 : " + str(test_list1))
print ("Original list 2 : " + str(test_list2))
  
# using map() + list comprehension
# to interleave lists
res = [i for j in map(None, test_list1, test_list2)  
                       for i in j if i is not None]
  
# printing result
print ("The interleaved list is : " + str(res))
输出:
Original list 1 : [1, 4, 5]
Original list 2 : [3, 8, 9]
The interleaved list is : [1, 3, 4, 8, 5, 9]


方法#2:使用列表切片
Python的列表切片功能也可用于执行此特定任务。我们首先将一个列表扩展到另一个列表,然后让原始列表成为结果列表的所需备用索引。

# Python3 code to demonstrate 
# to interleave lists
# using list slicing
  
# initializing lists 
test_list1 = [1, 4, 5]
test_list2 = [3, 8, 9]
  
# printing original lists
print ("Original list 1 : " + str(test_list1))
print ("Original list 2 : " + str(test_list2))
  
# using list slicing
# to interleave lists
res = test_list1 + test_list2
res[::2] = test_list1
res[1::2] = test_list2
  
# printing result
print ("The interleaved list is : " + str(res))
输出:
Original list 1 : [1, 4, 5]
Original list 2 : [3, 8, 9]
The interleaved list is : [1, 3, 4, 8, 5, 9]


方法#3:使用itertools.chain() + zip()
zip()可用于链接两个列表,然后chain()可用于根据需要执行元素的备用附加。这是执行此任务的最有效方法。

# Python3 code to demonstrate 
# to interleave lists
# using zip() + itertools.chain()
import itertools
  
# initializing lists 
test_list1 = [1, 4, 5]
test_list2 = [3, 8, 9]
  
# printing original lists
print ("Original list 1 : " + str(test_list1))
print ("Original list 2 : " + str(test_list2))
  
# using zip() + itertools.chain()
# to interleave lists
res = list(itertools.chain(*zip(test_list1, test_list2)))
  
# printing result
print ("The interleaved list is : " + str(res))
输出:
Original list 1 : [1, 4, 5]
Original list 2 : [3, 8, 9]
The interleaved list is : [1, 3, 4, 8, 5, 9]