我有一个列表Student
,其结构如下:
[('abc', 50000), ('def', 34000),....]
这里每个元组的第一个元素是员工ID,第二个元素是工资。现在我想要做的是首先根据员工数量形成不同的桶。因此,存储桶将具有 - 0-5 employees
,0-10 employees
,0-15 employees
等等。例如,如果我在列表中说了32个员工数据,那么我的存储桶将是 - 0-5 employees
,0-10 employees
,0-15 employees
,0-20 employees
,0-25 employees
,{{ 1}},最后是0-30 employees
。并且每个桶将是他们工资的相关总和。请注意,员工人数可能会有所不同,也不一定是5名员工的完美组合。但是我希望他们能够在5个员工的差异中进行分配,直到最终的桶可能有小于5的差异。
到目前为止我已尝试过这个:
0-32 employees
我知道这段代码不正确,因为当事情重新初始化时,流程应该从第一个员工开始,而不是列表中的下一个员工。我当前的代码从下一位员工开始。 我所拥有的是用累积或运行信息构建这种类型的存储桶的困难时期。我怎样才能形成这些桶?
答案 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)]