假设我有两个任意但长度相等的列表,例如:
['a','b','c','d']
['r','t','y','h']
对于这两个列表,我希望输出为:
'ar', 'bt', 'cy', 'dh'
基本上,第一个列表的第一个元素是第二个列表的第一个元素,依此类推。我该怎么办?请注意,列表可以是任意长度,而不仅仅是示例所示,但第一个列表的长度等于第二个列表的长度。
答案 0 :(得分:5)
zip
将它们组合在一起的列表,然后join
将每对字符串合并为一个字符串:
>>> list1 = ['a','b','c','d']
>>> list2 = ['r','t','y','h']
>>> [''.join(pair) for pair in zip(list1, list2)]
['ar', 'bt', 'cy', 'dh']
答案 1 :(得分:1)
您可以使用map
和zip
来完成这项工作:
>>> l1=['a','b','c','d']
>>> l2=['r','t','y','h']
>>> map(lambda(x,y): x+y, zip(l1,l2))
['ar', 'bt', 'cy', 'dh']
zip
的作用是创建一个元组列表,其中第i个元组包含每个列表中的第i个元素。然后,您可以通过连接将每个元组转换为字符串(使用lambda(x,y): x+y
)。
答案 2 :(得分:1)
如果您需要功能方法,可以使用map
和operator.add
import operator
map(operator.add,['a','b','c','d'], ['r','t','y','h'])
>>>['ar', 'bt', 'cy', 'dh']
不需要lambdas
或列表理解来进行连接。
注意:对于那些说不是Python 3的人来说,这个转储可能会让你改变主意:
Python 3.1.3 (r313:86834, Nov 28 2010, 10:01:07)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import operator
>>> list(map(operator.add, ['a','b'],['r','t']))
['ar', 'bt']
答案 3 :(得分:1)
上述答案似乎也适用于Python 2.7。此外,您可以使用zip和内联加法器(lambda):
list1 = ['a','b','c','d']
list2 = ['r','t','y','h']
add = lambda pair:pair[0]+pair[1]
print [add(pair) for pair in zip(list1, list2)]
或只是一行:
print map(lambda pair:pair[0]+pair[1],[pair for pair in zip(list1,list2)])
map()
允许映射多个参数,从而产生一个简短的解决方案:
print map(lambda x,y:x+y, list1, list2)
答案 4 :(得分:0)
以下是其他一些方法
>>> list1 = ['a','b','c','d']
>>> list2 = ['r','t','y','h']
>>> [x + y for x, y in zip(list1, list2)]
['ar', 'bt', 'cy', 'dh']
>>> it = iter(list2)
>>> [x + next(it) for x in list1]
['ar', 'bt', 'cy', 'dh']