首先,这是一个完全“菜鸟”的问题--谢谢你提前花了这么短的时间!
我想有一个列表,并将列表中的所有数字与一个偶数索引相加在一起。即1,2,3,4=4
def sum_even(array):
sum_array=array[0]
for i in array:
if i %2==0:
sum_array=sum_array+array[i]
print (sum_array)
sum_even([1,2,3,4,5,6])
这给了我一个错误(IndexError:列表索引超出范围);sum(1,2,3,4,5)仍然有效。
我做错了什么小事?
非常感谢!
发布于 2014-08-26 12:43:53
你的产品线
for i in array
在值上迭代,而不是键和数组索引从0开始,因此当它达到值'4‘并试图取消对array4的引用时,它是越界的。您应该改为使用
for i in range(len(array))
它将迭代从0到1的数组长度。更干净的解决方案是使用列表理解或过滤器,例如
sum([x for x in sum_array[::2])
发布于 2014-08-26 12:45:15
您正在迭代数组的元素。因此,通过在i=4
时调用sum_even([4, 5, 6])
,您的代码将尝试调用array[4]
来访问列表的第四个元素,但该元素并不存在。
您只需执行sum_array=sum_array+i
即可。或者,您可以这样做
for i, element in enumerate(array):
if element %2==0:
sum_array=sum_array+array[i]
发布于 2014-08-26 12:43:47
一种更"pythonic“的方式是:
print(range(1,5) )
>>> [1,2,3,4]
print(range(1,5)[::2] )
>>> [1,3]
print(range(1,5)[1::2] )
>>> [2,4]
print( sum( range(1,5) ))
>>> 10
print( sum( range(1,5)[::2] ))
>>> 4
print( sum( range(1,5)[1::2] ))
>>> 6
https://stackoverflow.com/questions/25505991
复制相似问题