有条件的 while 循环用于计算累积总和



我想编写一个函数,它接受数字列表并返回累积总和;也就是说,一个新列表,其中第 i 个元素是原始列表中第一个 i+1 元素的总和。例如,[1, 2, 3]的累积总和为 [1, 3, 6]

这是我到目前为止的代码:

 def count(list1):
     x = 0
     total = 0
     while x < len(list1):
         if x == 0:
             total = list1[0]
             print total
             x = x +1
         else:
             total = list1[x] + list1[x -1]
             print total
             x = x + 1
     return total 
print count([1, 2, 3, 4, 7])

但是,它不起作用。

你能告诉我我做错了什么吗?我为此工作了很长一段时间。

你可能有点想多了这个过程。逻辑不需要真正拆分为这样的案例测试。到目前为止,您拥有的部分是总计数器,但您应该只需要遍历列表中的每个值。不做一个有条件的,如果..还

通常我不会只给出答案,但我觉得看到工作代码比尝试浏览到目前为止的额外和不必要的问题更有益。

def count(l):
    total = 0
    result = []
    for val in l:
        total += val
        result.append(total)
    return result

我们仍然使用总计数器。我们为结果创建一个空列表。但是我们所要做的就是遍历列表中的每个项目,添加到总数中,然后每次都附加新值。没有条件,您不必担心while何时会破裂。您将循环访问原始列表中的每个项目是一致的。

在这里,您将当前索引与最后一个索引一起添加并覆盖"total"

total = list1[x] + list1[x -1]

我猜你想要这样的东西,它将为下面的列表返回 31。

def count(list1):
     x = 0
     total = 0
     while x < len(list1):
         total += list[x]
         print total
         x = x + 1
     return total
list = [1, 2, 4, 8, 16]
print count(list)

一个简单的方法是

>>> given_list = [1, 4, 5, 8]
>>> output_list = [sum(given_list[:num]) for num in range(len(given_list)+1)]
>>> output_list
[0, 1, 5, 10, 18]
>>> output_list[1:]
[1, 5, 10, 18]
>>> 

看看这是否适用于不同类型的列表。我把这个留给你。

你没有完全按照total做你想做的事情。

您要total设置的内容是 list[x] + list[x+1] .你真的希望它是所有先前元素和当前元素的总和。

total = list1[x] + list1[x-1]替换为 total += list1[x]

你不需要写这个函数。它被放置在 itertools 模块中:

>>> list(itertools.accumulate([1,2,3]))
[1, 3, 6]

这是我提出的解决方案:

def count(list1):
     total = 0
     old = 0
     for position, x in enumerate(list1):
         total = x + old
         old = x
         print total
     return

count([1,1,2,3,5,8,13])

另一种解决方案,单行,但绝对有效(http://ideone.com/qtwh7),即使多行解决方案更清楚这里真正发生的事情:

data = [3, 7, 22, -3, 5, -23, 16]
result = reduce(lambda a, b: a+[a[-1]+b], data, [0])[1:]
print result

我做了同样的练习,接下来是我的解决方案。它仅使用基本的append列表方法和切片列表运算符。

def accum(list):
    """Sequential accumulation of the original list"""
    result = []
    for i in range(len(list)):
        result.append(sum(list[:i+1]))
    return result

相关内容

  • 没有找到相关文章

最新更新