在List Python中添加负数

时间:2018-07-29 06:33:03

标签: python

以下python代码有什么问题。

List3=[7,5,4,4,3,1,-2,-3,-5,-7]
total=0
i=6
while i>=6:
    total = total + List3[i]
    i=i+1
    if i> len(List3):
        break
print(total)

while循环不应在List3 [6] =-2处开始添加,并且当i大于列表的长度时中断。我的逻辑有什么问题? 它返回:

IndexError                                Traceback (most recent call last)
<ipython-input-41-7e2f7eca2eb8> in <module>()
  4 i=6
  5 while 6<= i:
----> 6     totaln = totaln + List3[i]
  7     i=i+1
  8     if i> len(List3):

IndexError: list index out of range

5 个答案:

答案 0 :(得分:1)

我认为while循环是错误的。 i = i+1,如果条件应该在while循环中。第二点是i >= len(List3)就足够了。 i > len(List3)将导致最后一个索引超出索引范围

答案 1 :(得分:1)

您的代码存在问题,在最后一次迭代中,第7行将变为10> 10,这将为假,因此不会中断循环。并且它将尝试访问不存在的第5行的List [10],因此它将以错误IndexError: list index out of range中断,因为List3的长度为10,这意味着最后一个元素的索引为9。

修改后的代码将起作用

  List3=[7,5,4,4,3,1,-2,-3,-5,-7]
  total=0
  i=6
  while i>=6:
    total = total + List3[i]
    i=i+1
    if i > len(List3) - 1:
      break
  print(total)

但是如果您想获得任何列表中所有负数之和的正确方法

total=0
for i in List3:
    if i<0:
    total += i
print(total)

答案 2 :(得分:1)

语句顺序错误,应首先检查是否没有访问超出列表末尾的元素,然后才实际访问它们:

while i>=6:
    if i>= len(List3):  # this moved here, also note `>=` instead of `>`
        break

    total = total + List3[i]
    i += 1

最后,您所有的代码都可以写成简单的一行代码:

sum( List3[6:] )  # that's it!!

答案 3 :(得分:1)

在最后一次迭代中,内部if计算10> 10,该返回的值为false,因此不会中断循环。并且它继续获得List [10]-这是无效的,因此会破坏代码。

if i> len(List3):替换为if i>= len(List3):。它应该可以工作

答案 4 :(得分:0)

您可以尝试

total=0
for i in list3:
    if i<0:
        total+=i