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 库。

更新于: 2023-07-18

121 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告