2012-07-28 159 views
14

例如,我有一個這樣的名單:如何將兩個列表的元素添加到一個列表中?

list1 = [good, bad, tall, big] 

list2 = [boy, girl, guy, man] 

,我想做出像這樣的列表:

list3 = [goodboy, badgirl, tallguy, bigman] 

我嘗試的類似:

list3=[] 
list3 = list1 + list2 

但這將只包含值list1

所以我用for

list3 = [] 
for a in list1: 
for b in list2: 
    c = a + b 
    list3.append(c) 

但它會導致過多的列表(在這種情況下,他們中的4 * 4 = 16)

我應該怎麼辦?任何幫助都會非常棒!

回答

21

您可以使用列表內涵與zip

list3 = [a + b for a, b in zip(list1, list2)] 

zip通過組合從你給它iterables元素產生一個元組列表。所以在你的情況下,它會返回list1list2中的元素對,直到先用盡。

+0

謝謝!它真的幫助! :) – 2012-07-28 17:34:15

+0

+1在python中執行此操作的最佳方法。 – jamylak 2012-07-30 03:46:47

+1

事後看來,我可能會推薦一些類似於'map'解決方案的其他答案:map(operator.add,list1,list2)''。不過,使用二元+函數與'map'相比,列表解析功能鮮爲人知。 – Xion 2013-03-09 19:32:23

1

使用您嘗試的循環的解決方案是一種方式,這比Xions解決方案更適合初學者。

list3 = [] 
for index, item in enumerate(list1): 
    list3.append(list1[index] + list2[index]) 

這也適用於較短的解決方案。使用地圖()和拉姆達,我更喜歡這種過度壓縮,但多數民衆贊成高達大家

list3 = map(lambda x, y: str(x) + str(y), list1, list2); 
+1

爲什麼使用枚舉如果你不使用'item'? – Lenna 2012-07-28 17:26:32

+0

沒理由。爲了獲得索引,我想你也可以使用範圍(),但我只是習慣於這種方式。 – 2012-07-28 17:27:18

+1

你可以在循環內部有'list3.append(item + list2 [index])'這樣'item'被使用。 – Xion 2012-07-28 17:34:40

0

這個或相同尺寸的任何兩個列表,你也可以使用這樣的:

for i in range(len(list1)): 
    list3[i]=list1[i]+list2[i] 
0

使用Zip

list3 = [] 
for l1,l2 in zip(list1,list2): 
    list3.append(l1+l2) 

list3 = ['goodboy', 'badgirl', 'tallguy', 'bigman']

相關問題