首先,这是一个完整的“noob”问题 - 感谢你提前很短的时间!
我想要一个列表并添加一个偶数索引的列表中的所有数字。即[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])虽然有效。
我做错了什么小事?
非常感谢!
答案 0 :(得分:1)
你的行
for i in array
重写值而不是键和数组索引从0开始,因此当它达到值'4'并尝试取消引用数组[4]时,它超出了界限。你应该改为使用
for i in range(len(array))
将从0到1长度的数组迭代。更清洁的解决方案是使用列表理解或过滤器,例如
sum([x for x in sum_array[::2])
答案 1 :(得分:1)
您正在迭代数组的元素。因此,当sum_even([4, 5, 6])
您的代码调用i=4
时尝试访问列表的第4个元素(不会退出)时,请致电array[4]
。
你应该只做sum_array=sum_array+i
。或者,你可以做到
for i, element in enumerate(array):
if element %2==0:
sum_array=sum_array+array[i]
答案 2 :(得分:0)
更“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
答案 3 :(得分:0)
def sum_even(array):
sum_array=array[0]
for i in range(len(array)):
if i %2==0:
sum_array=sum_array+array[i]
print (sum_array)
sum_even([1,2,3,4,5,6])
当想要遍历索引时, 你想迭代列表中的位置列表
例如: 如果sum_even([7,6,3,4,5,6])
for i in array:
i=7
i=6
i=3
i=4
i=5
i=6
索引7和6不存在,因为列表不够长。
for i in range(len(array)):
i=0
i=1
i=2
i=3
i=4
i=5
len(array) = 6
range(6) = [0,1,2,3,4,5]
或更清洁的版本:
def sum_even(array):
return sum([x for x in array[::2]])
print sum_even([1,2,3,4,5,6])
[:: 2]表示每隔一个位置从位置0切片
[1 :: 2]表示每隔一个位置从位置1切片
答案 4 :(得分:0)
你正在尝试访问数组[6]但是数组由零索引开始组成数组[5]。这就是为什么要显示error.Modify你的函数
def sum_even(array):
sum_array=0
for i,val in enumerate(array):
#print "i=%d:: val=%d" % (i,val)
if i %2==0:
sum_array=sum_array+array[i]
print (sum_array)
sum_even([1,2,3,4,5,6])
取消打印声明,您将了解更多。