📜  Python|交替合并两个列表(1)

📅  最后修改于: 2023-12-03 15:34:17.672000             🧑  作者: Mango

Python | 交替合并两个列表

在Python中,我们经常需要将两个列表结合起来。使用zip()函数可以轻松地完成单个列表的合并,但如何将两个列表交替合并到一个新列表中呢?本文将介绍3种方法来实现这个任务。

方法1:使用循环

使用循环是最简单的方法之一。我们可以使用for循环逐个遍历两个列表中的元素,并将它们交替插入到新列表中。

def alternate_merge(list1, list2):
    merged_list = []
    for i in range(max(len(list1), len(list2))):
        if i < len(list1):
            merged_list.append(list1[i])
        if i < len(list2):
            merged_list.append(list2[i])
    return merged_list

可以通过调用该函数来测试上述代码:

>>> list1 = ['a', 'b', 'c']
>>> list2 = [1, 2, 3, 4]
>>> print(alternate_merge(list1, list2))
['a', 1, 'b', 2, 'c', 3, 4]
方法2:使用zip()函数和列表推导式

我们可以使用zip()函数将两个列表“压缩”成一个迭代器。然后,我们可以使用列表推导式从迭代器中生成一个新列表。

def alternate_merge(list1, list2):
    return [elem for pair in zip(list1, list2) for elem in pair] + list1[len(list2):] + list2[len(list1):]

可以通过调用该函数来测试上述代码:

>>> list1 = ['a', 'b', 'c']
>>> list2 = [1, 2, 3, 4]
>>> print(alternate_merge(list1, list2))
['a', 1, 'b', 2, 'c', 3, 4]
方法3:使用itertools.zip_longest()和列表推导式

在两个列表长度不同的情况下,前两种方法会产生错误。解决此问题的方法是使用itertools.zip_longest()函数。使用此函数,我们可以创建一个迭代器,该迭代器将头对齐两个列表,缺少值的列表将用给定的值填充。然后,我们可以使用列表推导式将所有对应对齐元素组合在一起。

def alternate_merge(list1, list2):
    from itertools import zip_longest
    return [elem for pair in zip_longest(list1, list2, fillvalue='') for elem in pair]

可以通过调用该函数来测试上述代码:

>>> list1 = ['a', 'b', 'c']
>>> list2 = [1, 2, 3, 4]
>>> print(alternate_merge(list1, list2))
['a', 1, 'b', 2, 'c', 3, 4]

无论哪种方法,返回的结果都是相同的。你可以选择你认为最适合你的实现方式,也可以根据你的特定需求进行修改。