如何在python中运行总和?

时间:2015-08-18 13:02:05

标签: python list running-total cumulative-sum

我有一个列表Student,其结构如下:

[('abc', 50000), ('def', 34000),....]

这里每个元组的第一个元素是员工ID,第二个元素是工资。现在我想要做的是首先根据员工数量形成不同的桶。因此,存储桶将具有 - 0-5 employees0-10 employees0-15 employees等等。例如,如果我在列表中说了32个员工数据,那么我的存储桶将是 - 0-5 employees0-10 employees0-15 employees0-20 employees0-25 employees,{{ 1}},最后是0-30 employees。并且每个桶将是他们工资的相关总和。请注意,员工人数可能会有所不同,也不一定是5名员工的完美组合。但是我希望他们能够在5个员工的差异中进行分配,直到最终的桶可能有小于5的差异。

到目前为止我已尝试过这个:

0-32 employees

我知道这段代码不正确,因为当事情重新初始化时,流程应该从第一个员工开始,而不是列表中的下一个员工。我当前的代码从下一位员工开始。 我所拥有的是用累积或运行信息构建这种类型的存储桶的困难时期。我怎样才能形成这些桶?

2 个答案:

答案 0 :(得分:1)

试试这个:

这将数据分组为5个增加的块,并打印该组加上所有工资的总和。

(注意:我使用>>> data = [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432), ('btuUD', 3844), ('fWJUi', 3973), ('nptHC', 4854), ('dbAxH', 1467), ('egeDs', 4514), ('ArvtJ', 4798), ('PGtEh', 1924), ('VkrIb', 1637), ('dbIpm', 1612), ('HShOu', 2425), ('cWZOG', 4286), ('cMESU', 3374), ('fcBpX', 3926), ('VWhFW', 4546), ('FLLmu', 2609), ('XrLEf', 3829), ('xaWZh', 1543)] >>> >>> for group in [data[:i+5] for i in range(0, len(data), 5)]: ... print group ... print sum(x[1] for x in group) ... [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051)] 14561 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291)] 33388 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432)] 51118 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432), ('btuUD', 3844), ('fWJUi', 3973), ('nptHC', 4854), ('dbAxH', 1467), ('egeDs', 4514)] 69770 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432), ('btuUD', 3844), ('fWJUi', 3973), ('nptHC', 4854), ('dbAxH', 1467), ('egeDs', 4514), ('ArvtJ', 4798), ('PGtEh', 1924), ('VkrIb', 1637), ('dbIpm', 1612), ('HShOu', 2425)] 82166 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432), ('btuUD', 3844), ('fWJUi', 3973), ('nptHC', 4854), ('dbAxH', 1467), ('egeDs', 4514), ('ArvtJ', 4798), ('PGtEh', 1924), ('VkrIb', 1637), ('dbIpm', 1612), ('HShOu', 2425), ('cWZOG', 4286), ('cMESU', 3374), ('fcBpX', 3926), ('VWhFW', 4546), ('FLLmu', 2609)] 100907 [('KgqZe', 4675), ('bFbad', 1279), ('oswIx', 2644), ('mEPlC', 2912), ('rnQGs', 3051), ('BTYHr', 3367), ('AgEqM', 2804), ('ovgNh', 4548), ('AlTAn', 4817), ('vOYtV', 3291), ('vbTxW', 4740), ('rzcRq', 3259), ('ZAJpv', 3800), ('IVGDY', 1499), ('fvCDx', 4432), ('btuUD', 3844), ('fWJUi', 3973), ('nptHC', 4854), ('dbAxH', 1467), ('egeDs', 4514), ('ArvtJ', 4798), ('PGtEh', 1924), ('VkrIb', 1637), ('dbIpm', 1612), ('HShOu', 2425), ('cWZOG', 4286), ('cMESU', 3374), ('fcBpX', 3926), ('VWhFW', 4546), ('FLLmu', 2609), ('XrLEf', 3829), ('xaWZh', 1543)] 106279 库来生成数据,因此它看起来很奇怪)

修改

要改为打印范围,只需更改打印语句:

random

答案 1 :(得分:1)

与Ben的答案类似:

 # function to sum a list of (string, int) tuples
 fsum = lambda x: sum(i[1] for i in x)

 buckets = [fsum(salaries[:i]) for i in range(5, len(salaries), 5)]