Python 每K个值的分块求和

Python 每K个值的分块求和

分块求和,也称为部分和或滚动和,是一种计算序列(如列表、数组或任何可迭代对象)中元素和的过程,不是一次性计算整个序列的和,而是将和分成较小的块或子集进行计算。每个块表示序列中一组连续的元素,每个块都单独计算其和。

例如,考虑序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],并计算具有块大小为3的分块求和。

  • 块1:[1, 2, 3] → 和:1 + 2 + 3 = 6

  • 块2:[4, 5, 6] → 和:4 + 5 + 6 = 15

  • 块3:[7, 8, 9] → 和:7 + 8 + 9 = 24

  • 块4:[10] → 和:10

具有块大小为3的分块求和的结果将是 [6, 15, 24, 10]。

分块求和可在各种场景中非常有用,如以块的方式处理大型数据集或时间序列数据,以避免与内存相关的问题并提高计算效率。它还常用于需要对数据进行小段处理的算法和数据分析任务。

要在Python中执行分块求和,即计算列表或可迭代对象中每K个值的和,可以使用各种方法。

使用循环

一种简单直接的方法是使用循环对列表或可迭代对象进行迭代,并计算每K个值的和。

示例

在这个示例中,我们初始化一个空列表result来存储分块求和的结果。我们还初始化chunk_sum以跟踪每个块的和。我们使用enumerate迭代值以获得索引i和值。我们将每个值添加到chunk_sum,并检查i是否是K的倍数。如果是,我们将chunk_sum附加到result列表并将chunk_sum重置为0。最后,我们检查是否有任何没有组成完整块的剩余值,并在需要时将它们附加到result列表。

def chunked_sum_loop(values, K):
   result = []
   chunk_sum = 0
   for i, value in enumerate(values, 1):
      chunk_sum += value
      if i % K == 0:
         result.append(chunk_sum)
         chunk_sum = 0
   if chunk_sum != 0:
      result.append(chunk_sum)
   return result
values = [5,78,787,99,44,9,22]
K = 2
print("The chuncked sum of the given values:",chunked_sum_loop(values, K))

输出

The chuncked sum of the given values: [83, 886, 53, 22]

使用列表推导式

另一种方法是利用列表推导式来生成一个分块求和的列表。

示例

在这个示例中,我们使用列表推导式来使用range函数迭代以大小为K的块中的值。对于每个块,我们使用sum()函数计算求和,从而生成一个分块求和的列表。

def chunked_sum_list_comprehension(values, K):
   return [sum(values[i:i+K]) for i in range(0, len(values), K)]
values = [5,78,787,99,44,9,22]
K = 2
print("The chuncked sum of the given values:",chunked_sum_list_comprehension (values, K))

输出

The chuncked sum of the given values: [83, 886, 53, 22]

使用itertools.islice()

itertools模块中的islice()函数提供了从可迭代对象中提取块的高效方法。

示例

在这个例子中,我们使用iter()从values创建了一个迭代器,并初始化一个空的结果列表。我们使用islice()连续地提取大小为K的块,并将它们转换为列表。如果提取的块为空,意味着我们已经到达了values结尾,所以我们会中断循环。否则,我们将使用sum()计算块的和,并将其附加到结果列表中。

from itertools import islice
def chunked_sum_islice(values, K):
   iterator = iter(values)
   result = []
   while True:
      chunk = list(islice(iterator, K))
      if not chunk:
         break
      result.append(sum(chunk))
   return result
values = [5,78,7,8,9,9,4,4,9,22]
K = 2
print("The sum of the given values:",chunked_sum_islice(values, K))

输出

The sum of the given values: [83, 15, 18, 8, 31]

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程