列表索引超出范围列表[0]

时间:2017-10-28 01:31:15

标签: python list indices

我尝试编写一个简单的代码,该代码采用一个列表(nums)并对列表中的数字求和,只要数字不是13或者在13之后不立即发生。这是我的代码:

def sum13(nums):
   sum = 0
   if nums[0] != 13:
      sum += nums[0]
   for i in range(len(nums)):
      if nums[i] != 13 and nums[i - 1] != 13:
         sum += nums[i]
   return sum

我不断收到编译错误:'列出索引超出范围'。我没有改变列表的索引,当我调用nums [0]时,它在for循环之外,它将i限制在0和len(nums)之间,所以我' m不知道如何解决这个问题,或者如何以更优雅的方式编写代码来消除这个问题。

2 个答案:

答案 0 :(得分:0)

有趣......我试过你的代码看起来很好,但它不会像你想要的那样表现......

我试过了:

eval

返回59,应该是(10 + 11 + 14 + 14)= 49。

为什么会这样?这是因为你检查循环nums [i-1]。

由于第一个循环中i = 0,因此i-1 = -1。因此,nums [-1]是列表中的最后一项。

你能尝试一下这个小测试吗?

解决此问题的一种方法是:

def sum13(nums):
   sum = 0
   if nums[0] != 13:
      sum += nums[0]
   for i in range(len(nums)):
      print 'Current number:', str(nums[i])
      print 'Previous number:', str(nums[i-1])
      if nums[i] != 13 and nums[i - 1] != 13:
         sum += nums[i]
   return sum

ls = [10,11,13,12,14,14]
print 'Total sum:', str(sum13(ls))

如果它仍然不起作用,您可以分享您的代码和测试吗?

如评论中所述:

def sum13(nums):
   sum = 0
   if nums[0] != 13:
      sum += nums[0]
   for i in range(1, len(nums)):
      print 'Current number:', str(nums[i])
      print 'Previous number:', str(nums[i-1])
      if nums[i] != 13 and nums[i - 1] != 13:
         sum += nums[i]
   return sum

ls = [10,11,13,12,14,14]
print 'Total sum:', str(sum13(ls))

干杯,

答案 1 :(得分:0)

如果nums[],则访问nums[0]会引发IndexError

顺便说一句:如果使用while-loop,你会得到一个更简单的解决方案,见下文:

def sum13(nums):
    sum = 0
    i = 0
    while i < len(nums):
        x = nums[i]
        if x == 13:
            # skip current element and next element
            i += 2
        else:
            sum += x
            i += 1
    return sum