Python返回列表的总和,其中5个计数为双倍,5个计数后的数字为四倍

Python返回列表的总和,其中5个计数为双倍,5个计数后的数字为四倍,python,list,for-loop,if-statement,control-flow,Python,List,For Loop,If Statement,Control Flow,给定一个列表,返回列表中所有数字的总和。但是,如果列表中出现数字5,则必须将其加倍,并且紧跟在5之后的数字需要翻两番。所以下面的列表[1,2,4,1,5,2]应该返回26,[5,1,6]应该返回20 这就是我到目前为止所做的: def list_sum(x): if len(x) == 0: return 0 else: sum2 = 0 for i in x: if i == 5:

给定一个列表,返回列表中所有数字的总和。但是,如果列表中出现数字5,则必须将其加倍,并且紧跟在5之后的数字需要翻两番。所以下面的列表[1,2,4,1,5,2]应该返回26,[5,1,6]应该返回20

这就是我到目前为止所做的:

def list_sum(x):
    if len(x) == 0:
        return 0
    else:
        sum2 = 0
        for i in x:
            if i == 5:
                sum2 += 5*2
            if x[i - 1] == 5:
                sum2 += i * 4
            else:
                sum2 += i
       
    return sum2
我可以成功地完成问题的第一部分,将列表中的任何5乘以2,但在第二部分中遇到问题,我必须要求代码将5之后的数字翻两番。我在想,
x[I-1]==5
基本上是对5之后的元素进行索引,但是在尝试了一些打印语句之后,我注意到那行代码实际上没有做任何事情。。。有什么建议吗


快速提示:仅使用循环和if语句来解决此问题

定义一个变量,并在出现5时更改它

def list_sum(x):
    IfFive = False
    if len(x) == 0:
        return 0
    else:
        sum2 = 0
        for i in x:
            if i == 5:
                sum2 += 5*2
                IfFive = True
            elif IfFive:
                sum2 += i * 4
                IfFive = False
            else:
                sum2 += i
       
    return sum2
结果:

print(list_sum([5, 1, 6]))
>>> 20

定义一个变量,并在出现5时对其进行更改

def list_sum(x):
    IfFive = False
    if len(x) == 0:
        return 0
    else:
        sum2 = 0
        for i in x:
            if i == 5:
                sum2 += 5*2
                IfFive = True
            elif IfFive:
                sum2 += i * 4
                IfFive = False
            else:
                sum2 += i
       
    return sum2
结果:

print(list_sum([5, 1, 6]))
>>> 20
尝试这样做(在输入列表的长度范围内迭代:

mylist = [1, 2, 4, 1, 5, 2] 
def list_sum(thelist):
  sum2 = 0
  for x in range(len(thelist)):
    if thelist[x] == 5:
      sum2 += 5*2
    elif thelist[x-1] == 5:
      sum2 += thelist[x]*4
    else:
      sum2 += thelist[x]
   
  return sum2

print(list_sum(mylist))
尝试这样做(在输入列表的长度范围内迭代:

mylist = [1, 2, 4, 1, 5, 2] 
def list_sum(thelist):
  sum2 = 0
  for x in range(len(thelist)):
    if thelist[x] == 5:
      sum2 += 5*2
    elif thelist[x-1] == 5:
      sum2 += thelist[x]*4
    else:
      sum2 += thelist[x]
   
  return sum2

print(list_sum(mylist))

如果x[i-1]==5:
这是错误的,您迭代列表中的元素,而不是指示您是否进行了任何调试?我建议您阅读。如果一行中有两个
5
s呢?
[1,5,5]
return?
51
?您是否尝试使用单独的变量来记住上一个值是否为5?当您看到一个5时,将其设置为可以在下一次迭代中检查它。
如果x[i-1]==5:
这是错误的,您迭代了列表中的元素,但没有表明您是否进行了任何调试?我建议您阅读。如果一行中有两个
5
s,该怎么办?
[1,5,5]
return?
51
?您是否尝试使用单独的变量来记住上一个值是否为5?当您看到一个5时,请将其设置为可以在下一次迭代中检查。我希望
mylist=[1,5]
导致
11
。还是我遗漏了什么?@MarkMeyer我也得到了它。在发布它的时候,我用OP示例进行了测试,它们奏效了。你对这种情况有什么想法吗?@Wasif Hasan我将你的
elif
行编辑为
elif thelist[x-1]==5,而不是list[-1]= 5:< /代码>,这就解决了这个问题。因此,如果5是列表中的最后一个项目,代码会考虑<代码> Trist[X-1] < /Cord>作为列表的第一个项目,它将得到四个“期望”<代码> MyList= = [ 1, 5 ]。
导致
11
。还是我遗漏了什么?@MarkMeyer我也得到了它。在发布它的时候,我用OP示例进行了测试,它们奏效了。你对这种情况有什么想法吗?@Wasif Hasan我将你的
elif
行编辑为
elif thelist[x-1]==5,而不是list[-1]= 5:< /代码>,并确定了问题。因此,如果5是列表中的最后一项,则代码将考虑<代码> Triste[X-1] < /Cord>作为列表的第一项,并将得到四倍。