按位置合并两个列表的若干种方法

假设有两个列表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'] 
>>> 

当然这都是小改动。


附图:


7 views

©2020 by EasyCSTech. Special thanks to IPinfo​ and EasyNote.