使用Python計算字串列表中數字的總和


在Python中,我們可以使用多種方法來計算字串列表中數字的總和,例如使用正則表示式、使用isdigit()和列表推導式、使用分割和連線等。當處理包含字串的Python列表時,經常會遇到需要從這些字串中提取並計算數值的情況。這在處理來自文字檔案、日誌檔案或網路抓取的資料時尤其有用。在本文中,我們將透過不同的示例和演算法來理解這些方法。

演算法

使用Python查詢字串列表中數字總和的通用演算法如下:

  • 定義一個接受字串列表作為輸入的函式。

  • 將字串列表的所有元素連線成單個字串。

  • 應用模式或方法從字串中提取數值。

  • 將提取的值轉換為整數。

  • 計算整數列表的總和。

  • 返回總和作為結果。

方法1:使用正則表示式

正則表示式提供了一種有效匹配字串中模式的方法。透過定義模式並使用re.findall()函式,我們可以從字串列表中提取所有數值。然後將這些值轉換為整數並求和以獲得最終結果。

語法

numbers = [int(num) for num in re.findall(pattern, ''.join(string_list))]

這裡,列表推導式[int(num) for num in re.findall(pattern, ''.join(string_list))]用於將匹配的字串轉換為整數。

示例

在上面的示例中,我們有一個包含三個元素的string_list。sum_numbers()函式以string_list作為引數被呼叫。正則表示式模式r"\d+"匹配列表中每個元素中一個或多個數字。匹配的數字使用列表推導式提取並轉換為整數。最後,sum()函式計算這些數字的總和。

import re

def sum_numbers(string_list):
    pattern = r"\d+"
    numbers = [int(num) for num in re.findall(pattern, ''.join(string_list))]
    return sum(numbers)

string_list = ['abc123', 'def456', 'ghi789']
print(sum_numbers(string_list))

輸出

1368

方法2:使用isdigit()和列表推導式

此方法使用isdigit()方法(檢查字元是否為數字)與列表推導式結合使用。透過迭代字串列表中的每個字元並過濾掉非數字字元,我們可以將剩餘的數字轉換為整數。然後對生成的列表求和以獲得所需的總和。

語法

numbers = [int(char) for item in string_list for char in item if char.isdigit()]

這裡,列表推導式[int(char) for item in string_list for char in item if char.isdigit()]用於迭代string_list中每個元素的每個字元。isdigit()方法用於檢查字元是否為數字。

示例

在下面的示例中,我們與之前一樣使用相同的string_list。sum_numbers()函式以string_list作為引數被呼叫。列表推導式迭代string_list中每個元素的每個字元。isdigit()方法檢查字元是否為數字,如果是,則將其轉換為整數。然後使用sum()函式對生成的數字列表求和。

def sum_numbers(string_list):
    numbers = [int(char) for item in string_list for char in item if char.isdigit()]
    return sum(numbers)

string_list = ['abc123', 'def456', 'ghi789']
print(sum_numbers(string_list))

輸出

45

方法3:使用分割和連線

在此方法中,字串列表的元素使用join()方法連線成單個字串。然後將連線的字串分割成單詞列表。透過迭代每個單詞並過濾掉非數字單詞,我們可以將剩餘的單詞轉換為整數。最後,對生成的數字列表求和以獲得所需的結果。

語法

numbers = ''.join(string_list).split()
 numbers = [int(num) for num in numbers if num.isdigit()]

這裡,join()方法用於將string_list的所有元素連線成單個字串。

然後將split()方法應用於連線的字串以將其分割成單詞列表。列表推導式[int(num) for num in numbers if num.isdigit()]用於迭代numbers列表中的每個元素,如果它僅由數字組成,則將其轉換為整數。

示例

在下面的示例中,我們使用filter()函式和str.isdigit作為過濾條件,我們可以從string列表中的每個專案中提取數字。然後,我們使用''.join()連線過濾後的數字,並使用int()將生成的字串轉換為整數。

def sum_numbers(string_list):
    numbers = [int(''.join(filter(str.isdigit, item))) for item in string_list]
    return sum(numbers)

string_list = ['abc123', 'def456', 'ghi789']
print(sum_numbers(string_list))

輸出

1368

結論

在本文中,我們討論瞭如何使用Python中不同的方法查詢字串列表中數字的總和。我們討論了三種方法:使用正則表示式(re)、使用isdigit()方法與列表推導式結合,以及使用分割和連線操作。每種方法都有其自身的優點,可以根據任務的具體要求使用。

更新於:2023年7月17日

777 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.