📜  Python - 交错两个不同长度的列表(1)

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

Python - 交错两个不同长度的列表

在处理列表时,有时会需要将两个不同长度的列表按照一定规律交错在一起。比如将一个较短的列表插入到一个较长的列表中,或者将两个长度不相同的列表按照某种规律交错在一起。本文将介绍几种简单又实用的方法,让你轻松地完成这项任务。

方法1:列表推导式

使用列表推导式可以快速生成一个新列表,该列表由两个原列表按照一定规律交错而来。

a = [1, 2, 3, 4, 5]
b = ['A', 'B', 'C']
c = [val for pair in zip(a, b) for val in pair]
print(c)   # [1, 'A', 2, 'B', 3, 'C', 4, 5]

列表推导式中,zip函数用于将两个列表交错在一起,生成一个新的元组列表。将每个元组解包并在两个元素之间插入逗号,则得到了一个新列表,其中包含了两个原列表中的所有元素。

方法2:itertools模块

使用itertools模块中的zip_longest函数可以轻松地将两个长度不相同的列表按照一定规律交错在一起。

from itertools import zip_longest
a = [1, 2, 3, 4, 5]
b = ['A', 'B', 'C']
c = [val for pair in zip_longest(a, b) for val in pair if val is not None]
print(c)   # [1, 'A', 2, 'B', 3, 'C', 4, 5]

使用zip_longest函数可以将两个列表的所有元素按照一定规律交错在一起,生成一个新的元组列表。然后对于每个元组解包并在两个元素之间插入逗号,就得到了一个新列表,其中包含了两个原列表中的所有元素。需要注意的是,由于两个列表的长度不相同,zip_longest函数会使用特定的填充值(默认为None)来填充短列表中的缺失元素。因此,需要在推导式中使用if语句来过滤掉填充值。

方法3:循环遍历

使用循环遍历也可以将两个不同长度的列表按照一定规律交错在一起。对于较短的列表,需要先在其末尾添加一些填充值,让其长度与较长的列表相同。然后使用for循环逐个从两个列表中取出元素,并依次插入到新列表中。

a = [1, 2, 3, 4, 5]
b = ['A', 'B', 'C']
c = []
if len(a) > len(b):
    b += [None] * (len(a) - len(b))
else:
    a += [None] * (len(b) - len(a))
for i in range(len(a)):
    c.append(a[i])
    c.append(b[i])
print(c)   # [1, 'A', 2, 'B', 3, 'C', 4, 5]

需要注意的是,为了让两个列表长度相同,需要使用一个填充值(比如None)在其中一个列表的末尾添加一些元素。在遍历两个列表时,依次取出它们的元素并插入到新列表中即可。

总结

使用列表推导式、itertools模块或循环遍历都可以将两个不同长度的列表按照一定规律交错在一起。其中,列表推导式和itertools模块的方法都比较简洁、高效,适合处理较大的数据集。而循环遍历的方法则比较直观、易于理解,适合处理一些简单的问题。这里介绍的三种方法都有其优缺点,需要根据实际情况选择最适合的方法。