在Python中添加两个列表

5

我正在尝试将两个列表相加,使得第一个列表的第一个元素加上第二个列表的第一个元素,第二个元素加上第二个列表的第二个元素,以此类推,形成一个新的列表。

目前我有:

def zipper(a,b):
    list = [a[i] + b[i] for i in range(len(a))]
    print 'The combined list of a and b is'
    print list

a = input("\n\nInsert a list:")
b = input("\n\nInsert another list of equal length:")

zipper(a,b)

当我输入两个列表,其中一个是整数列表,另一个是字符串列表时,我收到了类型错误"无法将'str'和'int'对象连接起来。"

我尝试使用以下方法将两个列表转换为字符串:

list = [str(a[i]) + str(b[i]) for i in range(len(a))]

然而,一旦进入:
a = ['a','b','c','d']
b = [1,2,3,4]

我得到的输出结果是:
['a1', 'b2', 'c3', 'd4']
而我想要的是:
['a+1','b+2','c+3','d+4']

你有什么建议,关于我做错了什么吗?

注意:我需要编写一个函数,它的功能本质上与zip(a,b)相同,但是我不允许在函数中使用zip()。

2个回答

9

先压缩,再添加(仅限非)。

['%s+%s' % x for x in zip(a, b)]

抱歉我之前没提到,我需要编写一个函数,其功能与zip(a,b)基本相同,但是我不允许在函数中使用zip()。 - George Burrows
1
那么,适应你已经拥有的东西,并将其用于zip()的位置。 - Ignacio Vazquez-Abrams

3

你应该做什么

你应该使用

list = [str(a[i]) +"+"+ str(b[i]) for i in range(len(a))]

而不是

list = [str(a[i]) + str(b[i]) for i in range(len(a))]

在你的版本中,你从未表达过想要在两个元素之间输出加号字符。这是你的错误。

示例输出:

>>> a = [1,2,3]
>>> b = ['a','b','c']
>>> list = [str(a[i]) +"+"+ str(b[i]) for i in range(len(a))]
>>> list
['1+a', '2+b', '3+c']

我仍然得到相同的“无法连接'str'和'int'对象”的错误。 - George Burrows
@GeorgeBurrows 你是怎么得到那个 ['a1','b2','c3','d4'] 的代码而没有出错的呢?能详细说明一下吗? - lc2817
通过使用:list = [str(a[i]) + str(b[i]) for i in range(len(a))] - George Burrows
@GeorgeBurrows,关于我刚在Python日志中键入的代码片段,它与我给你的那行完全相同,您有什么看法? - lc2817

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