如何总结两个列表N元素

问题描述:

我需要添加两个数字列表。当一个列表大于另一个时,我得到错误“IndexError:列表索引超出范围”。该错误发生在resultado = v1[i] + v2[i]行,但我不知道如何解决它。如何总结两个列表N元素

我的代码是:

def suma(A, B): 

    if len(A) > len(B): 
     v1 = A 
     v2 = B 
    else: 
     v1 = B 
     v2 = A 
    v3 = [] 
    i = 0 
    for i in range(len(v1)): 
     resultado = v1[i] + v2[i] 
     v3.append(resultado) 
    for j in range(len(v1), len(v2)): 
     v3.append(v2[j]) 
    return v3 

vectorA = [] 
vectorB = [] 
x = 1 
while x !=0: 
    print "Ingrese los datos para el primer vector (0 para finalizar)" 
    x = input("-->>") 
    if x !=0: 
     vectorA.append (x) 

print "=" * 30 
x = 1 
while x !=0: 
    print "Ingrese los datos para el segundo vector (0 para finalizar)" 
    x = input("-->>") 
    if x !=0: 
     vectorB.append (x) 

print "=" * 30 
print vectorA 
print vectorB 
print "=" * 30 
print "A) SUMA DE VECTORES" 
print "=" * 30 

suma(vectorA, vectorB) 
print suma 

>>> import itertools 
>>> A = [1, 2, 3] 
>>> B = [10, 11] 
>>> [a + b for a, b in itertools.izip_longest(A, B, fillvalue=0)] 
[11, 13, 3] 

所以,

def suma(A, B): 
    return [a + b for a, b in itertools.izip_longest(A, B, fillvalue=0)] 

你想itertools.izip_longest

def suma(A, B): 
    return map(sum, itertools.izip_longest(A,B, fillvalue=0)) 

这是怎么回事,帮助您更与在这个阶段学习Python的大概是这样的:

,因为您使用长度越长名单到两个列表遍历实际的错误造成的。这是很容易通过改变

for i in range(len(v1)): 

分解成

for i in range(len(v2)): 

因为,v2是上面的比较后的短名单。你也应该更换

for j in range(len(v1), len(v2)):   
    v3.append(v2[j]) 

通过

for j in range(len(v2), len(v1)):   
    v3.append(v1[j]) 

因为,毕竟,len(v2)len(v1)小。最后替换

suma(vectorA, vectorB) 
print suma 

通过

print suma(vectorA, vectorB) 

具有印刷结果。您可以在下面找到工作脚本。

def suma(A, B): 

    if len(A) > len(B): 
     v1 = A 
     v2 = B 
    else: 
     v1 = B 
     v2 = A 
    v3 = [] 
    i = 0 
    for i in range(len(v2)): 
     resultado = v1[i] + v2[i] 
     v3.append(resultado) 
    for j in range(len(v2), len(v1)): 
     v3.append(v1[j]) 
    return v3 

vectorA = [] 
vectorB = [] 
x = 1 
while x !=0: 
    print "Ingrese los datos para el primer vector (0 para finalizar)" 
    x = input("-->>") 
    if x !=0: 
     vectorA.append (x) 

print "=" * 30 
x = 1 
while x !=0: 
    print "Ingrese los datos para el segundo vector (0 para finalizar)" 
    x = input("-->>") 
    if x !=0: 
     vectorB.append (x) 

print "=" * 30 
print vectorA 
print vectorB 
print "=" * 30 
print "A) SUMA DE VECTORES" 
print "=" * 30 

print suma(vectorA, vectorB) 
+1

+1实际帮助OP – georg 2013-04-06 23:00:00