Pythonでリスト内の最初の非ゼロ(0以外)の数値を見つける方法
この記事では、Pythonを使って、与えられた数値のリストの中から最初に現れる非ゼロ(0以外)の数値を見つける方法を解説します。
リストの先頭に複数のゼロが含まれている場合などに、最初の有効な数値がどの位置にあるのかを効率的に特定するテクニックとして、2つのアプローチを紹介します。
方法1:enumerateとnextを組み合わせる
まずenumerate関数を使ってリストの各要素とそのインデックスを取得し、次にnext関数を適用することで、条件を満たす最初の非ゼロ要素の位置を取得します。この方法では、ジェネレーター式を用いて簡潔に記述できるのが特徴です。
コード例
listA = [0, 0, 13, 4, 17]
# 与えられたリスト
print("Given list:\n ", listA)
# enumerateを使用して最初の非ゼロ要素のインデックスを取得
res = next((i for i, j in enumerate(listA) if j), None)
# 結果を出力
print("The first non zero number is at: \n", res)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
Given list: [0, 0, 13, 4, 17] The first non zero number is at: 2
この例では、リストの先頭に2つのゼロがあるため、インデックス2(値13)が最初の非ゼロ要素として返されています。なお、第2引数のNoneは、リスト内に非ゼロ要素が存在しなかった場合のデフォルト戻り値です。
方法2:nextとfilterを組み合わせる
2つ目の方法では、filter関数とラムダ式を組み合わせて、「0と等しくない」という条件をリストの各要素に適用します。その結果に対してnext関数を呼び出し、さらにindexメソッドで該当する位置を特定します。
コード例
listA = [0, 0, 13, 4, 17]
# 与えられたリスト
print("Given list:\n ", listA)
# next、filter、lambdaを使用して最初の非ゼロ要素の位置を取得
res = listA.index(next(filter(lambda i: i != 0, listA)))
# 結果を出力
print("The first non zero number is at: \n", res)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
Given list: [0, 0, 13, 4, 17] The first non zero number is at: 2
まとめ
どちらの方法でも同じ結果が得られますが、それぞれに特徴があります。
- enumerate + next:インデックスを直接取得でき、要素が見つからない場合も
Noneなどのデフォルト値を指定できるため、安全に扱えます。 - next + filter:
filterによる条件フィルタリングが直感的で、ラムダ式を変えることで柔軟な条件設定が可能です。
用途に応じて使い分けることで、より読みやすく堅牢なコードを書くことができます。
-
【Python】文字列が有効な数値かどうかを判定する方法
プログラミングでは、ある文字列が数値として有効かどうかを判定したい場面がよくあります。たとえば、「0.2」「abc」「hello」「-2.5」「10」という文字列が与えられた場合、判定結果はそれぞれ true、false、false、true、true となります。この記事では、Pythonを使って文字列が有効な数値を表しているかどうかをチェックする方法を解説します。解決のアプローチこの問題を解くには、Pythonの文字列パース(型変換)の仕組みを利用します。具体的には、次の手順で判定を行います。文字列を float() 関数で数値に変換してみます。変換が成功して例外が発生しなければ、その文字
-
【Python】数値を各桁のリストに変換する方法を解説
Pythonでデータ処理を行っていると、ある数値を「各桁の数字が要素となったリスト」に変換したい場面に出会うことがあります。例えば、1342という数値を [1, 3, 4, 2] のようなリストにするケースです。この記事では、その実現方法として代表的な2つのアプローチをサンプルコード付きで紹介します。 方法1:リスト内包表記を使う まずstr関数で数値を文字列に変換し、その各文字に対してint関数を適用して整数に戻します。最後に、その結果をリストとしてまとめます。コードが簡潔で読みやすいため、最もよく使われる書き方です。 サンプルコード numA = 1342 # 対象の数値 print(