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

Pythonでリスト内の「桁数が奇数」の要素をカウントする方法

正の整数からなるリスト nums が与えられたとき、「桁数が奇数になっている要素」がいくつあるかを求める問題を考えてみましょう。

たとえば、入力が [1, 300, 12, 10, 3, 51236, 1245] の場合を確認してみます。

  • 1 → 1桁(奇数)✓
  • 300 → 3桁(奇数)✓
  • 12 → 2桁(偶数)✗
  • 10 → 2桁(偶数)✗
  • 3 → 1桁(奇数)✓
  • 51236 → 5桁(奇数)✓
  • 1245 → 4桁(偶数)✗

この場合、該当する要素は 4 個なので、出力は 4 となります。

解き方のアプローチ

この問題は、次の手順で解くことができます。

  1. カウンター c を 0 で初期化する。
  2. リスト nums の各要素について、その桁数 s を求める。
  3. s が奇数であれば、c を 1 増やす。
  4. すべての要素を調べ終えたら、c を返す。

ポイントは桁数の求め方です。Pythonでは数値を文字列に変換して len() を使うことで、簡単に桁数を取得できます。

s = len(str(nums[i]))

このように str() で文字列化すれば、数学的な計算(対数や割り算の繰り返し)を使わずに、シンプルに桁数を判定できます。

実装例

それでは、実際のコードを見てみましょう。

class Solution:
    def solve(self, nums):
        c = 0
        for i in range(len(nums)):
            s = len(str(nums[i]))
            if s % 2 != 0:
                c = c + 1
        return c

ob = Solution()
print(ob.solve([1, 300, 12, 10, 3, 51236, 1245]))

入力

[1, 300, 12, 10, 3, 51236, 1245]

出力

4

コードの解説

処理の流れを順番に見ていきます。

  • c = 0:条件に合う要素を数えるためのカウンターを初期化します。
  • for i in range(len(nums)):リストの全要素を1つずつ取り出して処理します。
  • s = len(str(nums[i])):要素を文字列に変換し、その長さ=桁数を取得します。
  • if s % 2 != 0:桁数を2で割った余りが0でなければ奇数桁と判断し、カウンターを増やします。
  • return c:最後にカウントした件数を返します。

より簡潔な書き方(応用)

Pythonの内包表記を使うと、同じ処理を1行で書くこともできます。

def solve(nums):
    return sum(1 for n in nums if len(str(n)) % 2 == 1)

条件を満たす要素だけを数える sum() のイディオムは、Pythonらしい簡潔な表現です。可読性と処理速度のバランスを考えると、こちらも覚えておくと便利でしょう。

まとめ

桁数の判定には「数値を文字列に変換して長さを測る」という手法が最もシンプルです。len(str(n)) % 2 で奇数・偶数を判別すれば、リスト内の奇数桁の要素を簡単にカウントできます。初心者の方にも扱いやすい定番テクニックなので、ぜひ活用してみてください。

  1. Pythonでリスト内の偶数と奇数をカウントする3つの方法を解説

    この記事では、リスト内に含まれる偶数と奇数の個数を数える方法について、具体的なコード例とともに解説します。問題の概要課題: 与えられたリストの中から、偶数と奇数がそれぞれいくつ含まれているかをカウントします。ここでは、以下の3つのアプローチを紹介します。それぞれ特徴が異なるため、用途やコードの可読性に応じて使い分けるのがおすすめです。方法1:forループを使った基本的な方法(総当たり方式)最もシンプルで直感的な方法です。拡張forループで各要素を順番に確認し、2で割った余りによって偶数か奇数かを判定します。コード例list1 = [21, 3, 4, 6, 33, 2, 3, 1, 3, 76

  2. 【Python】タプルが出現するまでリスト内の要素数をカウントする方法

    リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F