如何将两个列表的元素添加到一个列表中?

15
例如,我有一个像这样的列表:
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)

但这将导致列表过多(在此情况下,会有16个列表,即4*4)

4个回答

22

您可以使用带有 zip 的列表推导式:

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

zip 函数通过组合你提供的可迭代对象中的元素来生成一个元组列表。在你的情况下,它将返回由 list1list2 中的元素成对组成的元组,直到其中任何一个被用尽。


1
回过头来看,我可能会推荐类似于其他答案中 map 解决方案的方法:map(operator.add, list1, list2)。尽管使用带有 map 的二进制加号函数是比列表推导式更不为人知的功能。 - Xion
@Xion 错了,与列表推导式相比,这种写法根本不可读,并且应在处理非常大的数据集时作为微优化的形式使用,其中map(add, list1, list2)将执行得更快。然而,在这种情况下,你最初的答案是正确的。 - jamylak
我不知道你所说的“operator.add”或“add”对象是什么,但这对我有效,并且似乎更短:map(''.join,zip(list1,list2)) - user1748155

1
一个使用循环的解决方案是一种尝试的方式,这比Xions的解决方案更适合初学者。
list3 = []
for index, item in enumerate(list1):
    list3.append(list1[index] + list2[index])

这也适用于更短的解决方案。使用map()和lambda,我更喜欢这个方法而不是zip,但这取决于每个人。

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

1
如果您不使用“item”,为什么要使用enumerate? - Lenna
没有什么特别的原因。我猜你也可以用range()中的a来获取索引,但我只是习惯了这种方式。 - Jonathan
1
你可以在循环中使用list3.append(item + list2[index]),这样就能使用变量item了。 - Xion
确切地说,我不认为没有定义项目的理由。如果他以后要做其他事情,这可能会很有用。我选择使用list1[index],因为这样更清楚你正在做什么。 - Jonathan

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 = ['好男孩', '坏女孩', '高个子', '大个子']


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接