编辑:感谢你的回复,这些回复很有帮助,但我不确定它们是否解决了我的问题的核心。在某些情况下,简单地选择列表中较低的一个,然后相应地添加值会很好,但在这种情况下,我实际上希望处理不均匀的列表,就好像较短的列表缺少的值为零一样。所以我想让1,2,3+ 1,2作为函数。我不认为zip或颠倒我的运算符可以实现这一点。
我正在尝试创建一个函数,它将两个列表的相应值相加,并返回一个新的列表,其中包含两个原始列表的每个索引的总和:
def addVectors(v1, v2):
    print(v1[0], v1[1], v2[0])
    newVector = []
    if len(v1) > len(v2):
        for index in range(len(v1)):
            print(index)
            newVector[index] += v1[index] + v2[index]
    else:
        for index in range(len(v2)):
            print(index)
            newVector[index] += v2[index] + v1[index]
    return newVector
addVectors([1, 2, 3], [1, 2])但是我得到了一个错误,声明列表索引超出范围?不确定我在这个看似简单的程序中做错了什么……
发布于 2012-09-21 05:12:15
你可能想改变这一行:
if len(v1) > len(v2):至:
if len(v1) < len(v2):这样,当v1较短时,您将迭代到v1中的元素数量,这将防止您越过边界。
请注意,这也会抛出一个错误,因为newVector是一个长度为0的列表,而您访问的内容超出了它的范围。你就得改变
newVector[index] += v1[index] + v2[index]至
newVector.append(v1[index] + v2[index])但是,请注意,这可以更简单地完成,如下所示:
def addVectors(v1, v2):
    return map(sum, zip(v1, v2))ETA:要用零填充列表,请执行以下操作:
import itertools
def addVectors(v1, v2):
    return map(sum, itertools.izip_longest(v1, v2, fillvalue=0))例如:
addVectors([1, 2, 3, 4, 5], [1, 2])
# [2, 4, 3, 4, 5]发布于 2012-09-21 05:12:45
为什么不直接用这个呢?
def sum_lists(a, b):
    return [x[0] + x[1] for x in zip(a, b)]
sum_lists([1, 2, 3], [4, 5, 6])    # -> [5, 7, 9]发布于 2012-09-21 05:13:15
您可以比较列表的长度,这是正确的。但随后您需要更改所需的操作。也就是说,当list1比list2长的时候,你应该只遍历list2长度的元素。
https://stackoverflow.com/questions/12520965
复制相似问题