Python:添加列表的每个第二个条目(初学者)

时间:2014-08-26 12:35:48

标签: python list

首先,这是一个完整的“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])虽然有效。

我做错了什么小事?

非常感谢!

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])

取消打印声明,您将了解更多。