首页 交叉合并两个等长列表
文章
取消

交叉合并两个等长列表

在网上见到了一篇文章,里面提到了一个算法问题:

编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。

这里先做个示例数据

1
2
3
4
import string

a = [x for x in range(1, 11)]
b = [x for x in string.ascii_lowercase[:10]]

问题不太难,笔者给出了如下方案

方案1

笨方法,交替填值:

1
2
3
4
5
6
7
8
9
10
11
12
def merge(a, b):
    result = []
    for index, _ in enumerate(range(len(a) * 2)):
        if index % 2 == 0:
            result.append(a.pop(0))
        else:
            result.append(b.pop(0))
    return result

if __name__ == '__main__':
    result = merge(a, b)
    print(result)

方案2

使用列表的切片赋值:

1
2
3
4
5
6
7
8
9
def merge(a, b):
    tmp = ['' for _ in range(len(a) * 2)]
    tmp[::2] = a
    tmp[1::2] = b
    return tmp

if __name__ == '__main__':
    result = merge(a, b)
    print(result)
本文由作者按照 CC BY 4.0 进行授权