Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのリストから文字列を除外して数値のみを合計する方法

Pythonでは、1つのリストの中に文字列と数値が混在していることがよくあります。この記事では、文字列を無視してリスト内の数値だけを合計する方法を2つ紹介します。

filter関数とisinstance関数を使う方法

isinstance関数は、要素が指定した型かどうかを判定できる組み込み関数です。これをlambda式と組み合わせてfilter関数に渡すことで、リストから数値(int型)だけを抽出できます。最後にsum関数を適用すれば、合計値が求まります。

サンプルコード

listA = [1,14,'Mon','Tue',23,'Wed',14,-4]
# 対象のリスト
print("Given list: ",listA)
# 数値のみを合計する
res = sum(filter(lambda i: isinstance(i, int), listA))
print ("Sum of numbers in listA: ", res)

実行結果

上記のコードを実行すると、次のような結果が出力されます。

Given list: [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4]
Sum of numbers in listA: 48

forループ(リスト内包表記)を使う方法

filter関数を使わず、リスト内包表記の中でisinstanceによる条件判定を行い、数値だけを新しいリストに集めてからsum関数で合計する方法です。処理の流れが直感的で読みやすいため、初心者にもおすすめの書き方です。

サンプルコード

listA = [1,14,'Mon','Tue',23,'Wed',14,-4]
# 対象のリスト
print("Given list: ",listA)
# 数値のみを合計する
res = sum([x for x in listA if isinstance(x, int)])
print ("Sum of numbers in listA: ", res)

実行結果

上記のコードを実行すると、次のような結果が出力されます。

Given list: [1, 14, 'Mon', 'Tue', 23, 'Wed', 14, -4]
Sum of numbers in listA: 48

注意点:bool型の扱い

Pythonではbool型はint型のサブクラスであるため、isinstance(True, int)はTrueを返します。そのため、リストにTrueやFalseが含まれている場合、それぞれ1と0として合計に加算される点に注意してください。bool値を除外したい場合は、isinstanceの代わりにtype(x) is intのような厳密な型比較を使用するとよいでしょう。

  1. Pythonでリストの累積和(累積合計)を求める方法

    この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:

  2. Pythonのタプルは不変(イミュータブル)だが、値を追加する方法はあるのか?

    タプルは変更できないオブジェクトPythonのタプル(tuple)は不変(イミュータブル)なオブジェクトです。そのため、append() や insert() のように要素を追加・挿入しようとする操作は許されず、実行するとエラーが発生します。しかし、実際の開発では「既存のタプルに要素を追加したい」という場面に遭遇することがあります。このような場合には、次のような回避策が有効です。解決策:リストを経由して新しいタプルを作る手順は以下のとおりです。組み込み関数 list() を使って、タプルをリストに変換します。リストであれば自由に append() や insert() で要素を追加できます。最