如何在Python中列出列表值的总和?

时间:2015-11-11 13:09:06

标签: python algorithm

我需要一些帮助来分类我的数据值。需要类似直方图的功能,但我不想列出事件,只列出每个bin的值的总和。

在下面的示例中,我列出了30天内Twitter粉丝的数量。假设我想要10个垃圾箱,那么每个垃圾箱将采用30/10 = 3天的值。对于前2天,bin 1的值将是1391 + 142 + 0 = 1533,bin 2 12618等,直到bin 10。

箱子的数量和持续时间最终可能会有所不同。例如,它还需要工作31天和5个箱子。

任何人都知道如何有效地做到这一点?是否有可用的Python函数?否则是for循环的实现,它能够将列表中的n个值加起来直到持续时间结束。

所有帮助都将受到高度赞赏:)谢谢!

    followersList = [1391, 142, 0, 0, 12618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    duration = 30
    bins = 10
    binWidth = round(duration / bins)

    #
    # for loop or python function that sums values for each bin
    #

2 个答案:

答案 0 :(得分:1)

你可以这样做:

bin_width = int(round(duration / bins))
followers = [sum(followersList[i:i+bin_width]) for i in xrange(0, duration, bin_width)]

答案 1 :(得分:0)

另一种方法是通过重塑和求和。我知道您已经有了一个有效的答案,但是您需要对numpy列表操作进行很多练习

import numpy

# this works when the list divides exactly into bins
followersList = [1391, 142, 0, 0, 12618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
duration = len(followersList)
bins = 10
binWidth = round(duration / bins)
print(numpy.array(followersList).reshape(bins, binWidth).sum(axis=1))

# otherwhise we have to pad with zero till its a multiple of containers
followersList = [1391, 142, 0, 0, 12618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
binWidth = 3
bins = (len(followersList) - 1) // binWidth + 1  # ceiling division
print(
    numpy.pad(followersList, (0, bins * binWidth - len(followersList)), 'constant').reshape(bins, binWidth).sum(axis=1))