Python - 连接两个列表

8

你好,我是一名新手,对Python和这个论坛都不太熟悉。

我的问题是:

我有两个列表:

list_a = ['john','peter','paul']
list_b = [ 'walker','smith','anderson']

我使用zip成功创建了这样一个列表:

list_c = zip(list_a, list_b)
print list_c
# [ 'john','walker','peter','smith','paul','anderson']

但我想要的结果是像这样的列表:
list_d = ['john walker','peter smith','paul anderson']

我尝试了各种方法都没有成功!我该如何获得这个结果?


只是顺便提一下,这不是一个论坛而是一个问答网站 :) - Jerry
4个回答

12

你正在从两个列表中获取压缩的名称,只需将每对名称组合起来,就像这样:

print map(" ".join, zip(list_a, list_b))
# ['john walker', 'peter smith', 'paul anderson']

这只是返回一个地图对象。 - user17714926

7
List_C = ['{} {}'.format(x,y) for x,y in zip(List_A,List_B)]

我更喜欢这个答案,因为它更清晰易懂,即使它可能比映射方法慢。 - holdenweb
@holdenweb:我通常坚持使用这种方法,以防数组值中有些不是字符串。 - GWW

0

解决这个问题的一种方法如下:

list_d = [] # desired output list
list_a = ['john', 'peter', 'paul'] 
list_b = ['walker', 'smith', 'anderson']

for i in range(len(list_a if len(list_a) < len(list_b) else list_b)):
    f = " ".join([list_a[i], list_b[i]])
    list_d.append(f)
print d

在执行上述代码后,您将获得的输出为:
['john walker', 'peter smith', 'paul anderson']

0
如果list_a和list_b的长度总是相同的,那么请尝试它: list_c = [list_a[i]+' '+list_b[i] for i in xrange(0,len(list_a))]
另一方面,如果list_a和list_b的长度可能不同,则:
list_c=[]
for i in xrange(0,len(list_a) if len(list_a)>len(list_b) else len(list_b)):
    merged_item = (list_a[i] if i<len(list_a) else '')+\
                  (' ' if i<len(list_a) and i<len(list_b) else '')+\
                  (list_b[i] if i<len(list_b) else '')
    list_c.append(merged_item)

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