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 となります。
解き方のアプローチ
この問題は、次の手順で解くことができます。
- カウンター
cを 0 で初期化する。 - リスト
numsの各要素について、その桁数sを求める。 sが奇数であれば、cを 1 増やす。- すべての要素を調べ終えたら、
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 で奇数・偶数を判別すれば、リスト内の奇数桁の要素を簡単にカウントできます。初心者の方にも扱いやすい定番テクニックなので、ぜひ活用してみてください。
-
Pythonでリスト内の偶数と奇数をカウントする3つの方法を解説
この記事では、リスト内に含まれる偶数と奇数の個数を数える方法について、具体的なコード例とともに解説します。問題の概要課題: 与えられたリストの中から、偶数と奇数がそれぞれいくつ含まれているかをカウントします。ここでは、以下の3つのアプローチを紹介します。それぞれ特徴が異なるため、用途やコードの可読性に応じて使い分けるのがおすすめです。方法1:forループを使った基本的な方法(総当たり方式)最もシンプルで直感的な方法です。拡張forループで各要素を順番に確認し、2で割った余りによって偶数か奇数かを判定します。コード例list1 = [21, 3, 4, 6, 33, 2, 3, 1, 3, 76
-
【Python】タプルが出現するまでリスト内の要素数をカウントする方法
リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F