对于循环,不在列表中添加迭代否

时间:2014-08-29 07:29:09

标签: python arrays

我是Python初学者。我正在尝试解决这个算法问题。

您将获得一个整数数组。您应该找到具有偶数索引(0th,2nd,4th ...)的元素之和,然后将此求和数与数组的最终元素相乘。不要忘记第一个元素的索引为0.对于空数组,结果将始终为0(零)。

注意:这一切都在一个函数中,输入会自动调用它,在一个名为array的列表中。

length = len(array) / 2
if len(array) % 2 == 1 :
    length = length + 1
a= length
q= 0
for x in xrange (length):
    if x % 2 == 0 :
        q = q + a[x] #This may have the problem.

sum  = q

answer = sum * array[len(array)]

return answer

它给出了这个错误: TypeError:' int'对象没有属性' getitem '  checkio,13  ,23

13指的是注释行。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你应该使用数组而不是a。 a是一个int。 您应该使用array[-1]代替array[len(array)],这会告诉您索引超出范围。

试试这个:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

array = [1,2,3,4,5,6,7,8,9, 10]

length = len(array) / 2
if len(array) % 2 == 1 :
    length = length + 1
a= length
q= 0
for x in xrange (length):
    if x % 2 == 0 :
        q = q + array[x] #This may have the problem.

sum  = q

answer = sum * array[-1]

print answer

告诉我它是否符合您的要求。

答案 1 :(得分:1)

首先,您要将整数length分配给变量a。那么你自然就无法对该整数使用索引表示法。我认为这只是你的一个错字,你可能想说a = array

更有趣的是,使用Python slice notation可以更简单地解决整个问题。例如,

def alternate_summiply(array):
    return sum(array[::2]) * array[-1]

将是解决它的紧凑方式。 (注意切片array[start:end:step]-1索引是序列中的最后一个元素。)

修改:此外,当您尝试访问array[len(array)]时,您将获得IndexError。请记住,"第一个元素的索引为0",这意味着最终元素的索引为len(array) - 1

答案 2 :(得分:1)

感谢Matthias和Tarjei解决我的问题。这是解决方案,简单就是让人难以置信 -

if len(array) == 0:
    return 0
else:
    return sum(array[::2]) * array[-1]