Python - 使用切片获取最后 K 个列表项的总和

pythonserver side programmingprogramming更新于 2024/1/20 4:15:00

在 Python 中,切片方法允许我们从序列中提取特定元素,例如字符串、列表或元组。它提供了一种简洁而灵活的方式来处理较大序列中的子序列。在本文中,我们将探讨如何使用切片操作获取列表中最后 K 个项目的总和。

算法

要找到列表中最后 K 个项目的总和,我们可以遵循一个简单的算法:

  • 接受列表和 K 的值作为输入。

  • 使用切片运算符从列表中提取最后 K 个项目。

  • 计算提取项目的总和。

  • 返回总和作为输出。

语法

sequence[start:end:step]

这里,切片方法有三个可选参数:

  • start(可选):切片应开始的元素的索引。如果未提供,则默认为序列的开头。

  • end(可选):切片应结束的元素的索引(不包括)。如果未提供,则默认为序列的末尾。

  • step(可选):选择元素的步骤或增量值。如果未提供,则默认为 1。

start、end 和 step 值可以是正整数或负整数,允许您向前和向后遍历序列。

示例 1:使用 Slice 方法计算最后 K 个项目的总和

通过在切片中指定负索引,我们可以从列表的末尾开始向后移动。以下是使用切片获取最后 K 个列表项的总和的语法:

在下面的例子中,我们有一个包含 10 个元素的列表 my_list。我们想要找出列表中最后 4 个元素的总和。通过使用切片运算符 [-K:],我们指定从倒数第四个元素到列表末尾的范围。然后 sum() 函数计算提取的元素的总和,结果为 280。

my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
K = 4
sum_of_last_k = sum(my_list[-K:])
print("Sum of last", K, "items:", sum_of_last_k)

输出

Sum of last 4 items: 340

示例 2:使用 collection 模块中的 tail 函数

collections 模块中的 tail 函数是一种从序列中提取最后 N 个元素的便捷方法。它允许您避免使用负索引进行切片。

在下面的示例中,我们从 collections 模块导入 deque 类,并将所需的最大长度 (maxlen) 指定为 N。通过将数字列表和 maxlen=N 传递给 deque,我们创建了一个仅保留最后 N 个元素的 deque 对象。使用 list(tail_elements) 将 deque 对象转换为列表,我们可以获得尾部元素 [6, 7, 8, 9, 10]。

from collections import deque

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 5
tail_elements = deque(numbers, maxlen=N)
print(list(tail_elements))

输出

[6, 7, 8, 9, 10]

示例 3:使用 itertools 模块中的 islice 函数

itertools 模块中的 islice 函数允许您通过提供起始、终止和步长值从可迭代对象(例如列表或字符串)中提取特定子序列。

在下面的示例中,我们从 itertools 模块导入 islice 函数。通过将 numbers 列表以及起始、终止和步长值传递给 islice(numbers, start, stop, step),我们提取所需的子序列 [6, 8, 10]。使用 list(islice(...)) 将结果转换为列表使我们能够打印子序列

from itertools import islice

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
start = 5
stop = 10
step = 2
subsequence = list(islice(numbers, start, stop, step))
print(subsequence)

输出

[6, 8, 10]

结论

在本文中,我们讨论了如何使用切片方法获取最后 k 个项目的总和。切片方法提供了一种简洁而有效的方法来执行此类计算,并使计算列表最后 K 个项的总和变得轻而易举。切片方法还可用于其他目的,如提取子序列、跳过具有步长值的元素、反转序列、获取最后 K 个元素等。


相关文章