簡體   English   中英

在python3中合並兩個列表

[英]Combining two lists in python3

假設我有兩個任意長度但長度相等的列表,例如:

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

對於這兩個列表,我希望輸出為:

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

基本上,第一個列表的第一個元素到第二個列表的第一個元素,依此類推。 我該怎么做? 請注意,列表可以具有任意長度,不僅是示例顯示的長度,而且第一個列表的長度等於第二個列表的長度。

zip列表以將它們組合在一起,然后join每對字符串合並為一個字符串:

>>> list1 = ['a','b','c','d']
>>> list2 = ['r','t','y','h']
>>> [''.join(pair) for pair in zip(list1, list2)]
['ar', 'bt', 'cy', 'dh']

您可以使用mapzip來完成工作:

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

如果您想使用功能性方法,可以使用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']

上面的答案似乎也適用於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)

這是其他一些方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM