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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.