Python 第k位数之和

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

使用循环

我们可以通过采用暴力方法来适应寻找列表元素kth位数字之和的最简单方式。暴力方法是我们在不考虑优化的情况下采用的方法。

我们可以采用以下方法:

  • 对数字列表进行迭代。

  • 在每次迭代中,将数字转换为字符串并找到第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)

这里的函数是我们需要应用于可迭代对象所有元素的函数的名称。’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库

功能模块是一个内置模块,提供了在Python中使用函数进行高阶函数和操作的功能。它提供了几个高阶函数。高阶函数是返回其他函数的函数。当我们想要使我们的代码更可重用时,这些方法非常有用。

示例

在以下示例中,首先我们导入了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库。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程