1

假设我有两个任意但长度相等的列表,例如:

['a','b','c','d']
['r','t','y','h']

对于这两个列表,我希望输出为:

'ar', 'bt', 'cy', 'dh'

基本上,第一个列表的第一个元素到第二个列表的第一个元素等等。我该怎么做?请注意,列表可以是任意长度,不仅仅是示例显示的长度,而且第一个列表的长度等于第二个列表的长度。

4

5 回答 5

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']
于 2013-07-30T00:32:36.043 回答
1

您可以使用mapandzip来完成这项工作:

>>> 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然后您可以通过连接(使用)将每个元组转换为字符串。

于 2013-07-30T00:36:53.923 回答
1

如果您想要一种功能性方法,您可以使用mapoperator.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']
于 2013-07-30T00:46:55.940 回答
1

上面的答案似乎也适用于 Python 2.7。此外,您可以只使用 zip 和内联加法器 (lambda):

1:

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)]

2:

或仅在一行中:

print map(lambda pair:pair[0]+pair[1],[pair for pair in zip(list1,list2)])

3:

map()允许映射多个参数,这会产生一个简短的解决方案:

print map(lambda x,y:x+y, list1, list2)
于 2016-10-07T21:02:10.947 回答
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']
于 2013-07-30T01:07:19.980 回答