Python - 第 k 位数字和
查找第 k 位数字和意味着我们必须找到数字列表中第 k 个索引处所有数字的总和。这是一个重要的编程概念,我们将其用于数据验证、财务分析等。在本文中,我们将探讨如何在几个自定义方法(如循环、列表推导式、lambda、map 函数等)的帮助下找到第 k 位数字和。我们还将使用 Numpy 和 Functool 等库来实现相同的功能。
理解问题陈述
假设我们有以下输入
list: [12,73,64] k=0
现在我们需要找到第 k 位数字和。在索引 k=0 处存在的数字为:1(来自 12),7(来自 73),6(来自 64)。所以这些数字的总和 = 1+7+6 = 14。我们期望的输出应该是 14。
Output: 14
使用循环
我们可以用来查找列表元素的第 k 位数字的总和的最简单方法之一是采用暴力方法。暴力方法是我们不考虑优化的情况下采用的方法。
我们可以采用以下方法
遍历数字列表。
在每次迭代中,将数字转换为字符串并查找第 k 个字符。
现在使用类型转换将字符重新转换为整数。
在每次迭代中将其添加到初始化的变量中。
示例
在以下代码中,我们使用暴力方法来查找第 k 位和。我们创建了一个名为 kth_digit_sum 的函数,它接受数字和值“k”。在函数中,我们将一个名为 sum 的变量初始化为 0。接下来,我们遍历数字列表。在每次迭代中,我们首先将元素转换为字符串,从中取出第 k 个字符,并将其转换为整数。我们将这些数字添加到我们初始化的变量中。最后,我们将其返回。
def kth_digit_sum_math(num, k): sum=0 for n in num: sum=sum+int(str(n)[k]) return sum test_list = [4154,1175,1754,7451,7642] k = 0 total_sum=kth_digit_sum_math(test_list, k) print(f"The kth digit sum of the list of numbers is: {total_sum}")
输出
The kth digit sum of the list of numbers is: 20
使用列表推导式
列表推导式是 Python 中创建列表元素的一种常用方法。它允许我们将多个表达式和语句组合到一行代码中以创建列表元素。但是,当条件语句过大时,此方法不适用。
示例
在下面的示例中,我们创建了一个名为 kth_digit_sum_math 的函数。它接受数字列表和值“k”。在这个函数中,我们使用 while 循环来遍历数字列表。在将数字转换为字符串数据类型后,我们获取了每次迭代的第 k 位数字。我们使用“int”方法将其转换回整数,并使用 sum 方法获取生成的所有元素的总和。
def kth_digit_sum_math(num_list, k): return sum(int(str(n)[k]) for n in num_list) test_list = [7845,4521,56452,58896,7842,57456] k = 1 total_sum=kth_digit_sum_math(test_list, k) print(f"The kth digit sum of the list of numbers is: {total_sum}")
输出
The kth digit sum of the list of numbers is: 42
使用 Lambda 和 Map 函数
Lambda 函数是 Python 中的一个重要概念。它们是没有名称的函数,用于执行小的函数。如果我们需要放入函数的逻辑足够小,并且我们确定不会在代码的其他地方使用相同的代码段,那么使用 lambda 函数通常是最佳实践。
另一方面,当我们想要对任何可迭代对象的全部元素应用某种方法时,map 方法非常有用。
语法
map(function, iterable)
这里 function 是我们需要应用于可迭代对象的所有元素的函数名称。“iterable”是必须应用函数的对象的名称。
示例
在下面的示例中,我们创建了 kth_digit_sum_math 函数,它将数字列表和值“k”作为参数。在这个函数中,我们首先使用 map 方法将所有数字转换为列表数据类型。接下来,我们使用 map 方法从元素中仅删除第 k 个字符。我们再次使用 lambda 方法将它们转换为整数,最后使用 sum 方法获取数字的总和。
def kth_digit_sum_math(num_list, k): str_list = map(str, num_list) characters_list = map(lambda x: x[k:k+1], str_list) digit_list = map(int, characters_list) return sum(digit_list) test_list = [7845,4521,56452,58896,7842,57456] k = 3 total_sum=kth_digit_sum_math(test_list, k) print(f"The kth digit sum of the list of numbers is: {total_sum}")
输出
The kth digit sum of the list of numbers is: 27
使用 Numpy 库
Numpy 是 Python 中一个非常流行的用于数值计算的库。Numpy 库处理数组——一种特殊的数据结构,看起来像列表,但只能保存同类数据。NumPy 库提供了多种方法,我们可以利用这些方法来执行多种任务。要查找第 k 位数字和,我们必须首先使用“array”方法将数字列表转换为数组。接下来,我们可以使用列表推导式和“np.sum”方法来查找所需数字的总和。
示例
在下面的示例中,我们首先在代码中导入了 Numpy 库。在 kth_digit_sum_numpy 函数中,我们使用 Numpy 的“array”方法将列表转换为 Numpy 数组。接下来,我们使用列表推导式获取仅第 k 位数字,并使用“array”方法将其转换为数组。最后,我们使用“np.sum”方法获取所有数组元素的总和。
import numpy as np def kth_digit_sum_numpy(num_list, k): str_list = np.array([str(num) for num in num_list]) digit_array = np.array([int(num_str[k]) for num_str in str_list]) return np.sum(digit_array) test_list = [7845, 4521, 56452, 58896, 7842, 57456] k = 1 total_sum = kth_digit_sum_numpy(test_list, k) print(f"The kth digit sum of the list of numbers is: {total_sum}")
输出
The kth digit sum of the list of numbers is: 42
使用 Functool 库
functions 模块是一个内置模块,它提供用于处理 Python 中函数的高阶函数和操作。它提供了一些高阶函数。高阶函数是可以返回其他函数的函数。“functools”模块中提供的函数在我们需要使代码更具可重用性时非常有用。
示例
在下面的示例中,我们首先导入了 Python 的 Functools 库。接下来,我们使用了 kth_digit_sum 函数,它接收数字列表并返回第 k 位和。在这个函数中,我们创建了 extract_kth_digit,它接收一个数字并返回第 k 位数字。接下来,我们使用 map 方法将此函数应用于所有列表元素。我们使用了 Functool 库的 reduce 方法来查找数字的总和。
import functools def kth_digit_sum(test_list, k): def extract_kth_digit(number): num_str = str(number) return int(num_str[k]) kth_digits = list(map(extract_kth_digit, test_list)) return functools.reduce(lambda x, y: x + y, kth_digits) test_list = [12345, 67890, 34567] k = 4 total_sum = kth_digit_sum(test_list, k) print(f"The kth digit sum of the list of numbers is: {total_sum}")
输出
The kth digit sum of the list of numbers is: 12
结论
在本文中,我们了解了如何在 Python 中从数字列表中查找第 k 位数字和。Python 是一种通用的编程语言,它为我们提供了各种方法。我们可以构建自己的自定义逻辑,也可以使用 Python 中提供的库来做到这一点。Lambda 函数、map 方法等是使代码更简洁的便捷选择。另一方面,为了获得更好的性能,我们可以使用 Numpy 库。