按位置合并两个列表的若干种方法
假设有两个列表a和b,a=['abc', 'def', 'hij', 'klm'], b=['123', '456', '789', '000'],我想把他们按照元素位置进行合并,生成列表c=['abc123', 'def456', 'hij789', 'klm000'],格式化就是:
输入:
>>> a=['abc', 'def', 'hij', 'klm']
>>> b=['123', '456', '789', '000']
输出:
>>> c=['abc123', 'def456', 'hij789', 'klm000']
假设我们使用最原始的方法,可以写一段函数完成这个功能:
>>> c = []
>>> for i in range(len(a)):
... c.append(a[i] + b[i])
...
>>> c
['abc123', 'def456', 'hij789', 'klm000']
>>>
虽然可以完成要求,但是总感觉很别扭,并且性能还挺差,下面看看有没有NB一点的方法。
读过三个有用的python函数这篇文章的应该很快就能想到zip、map,确实,我们可以利用它们写一个非常简短的代码完成所需功能,首先我们看下第一种方法:
>>> list(map(''.join, zip(a, b)))
['abc123', 'def456', 'hij789', 'klm000']
>>>
最内层的zip返回了a、b合并后的结果,
>>> zip(a, b)
[('abc', '123'), ('def', '456'), ('hij', '789'), ('klm', '000')]
然后''.join是map的函数,会针对zip结果里面的每个元素进行操作,map返回的是map对象,通过list转换为列表。
类似我们还有其他方法:
>>> [''.join(pair) for pair in zip(a, b)]
['abc123', 'def456', 'hij789', 'klm000']
>>>
这个方法用了列表生成式和zip函数。还可以这样:
>>> [x1+x2 for x1,x2 in zip(a, b)]
['abc123', 'def456', 'hij789', 'klm000']
>>>
当然这都是小改动。
附图:

9 views0 comments