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

Pythonで数値の1ビット数(ハミング重み)を数える方法

符号なし整数 n が与えられたとき、その2進表現に含まれる「1」の個数を求めることを考えます。この個数はハミング重み(Hamming Weight)とも呼ばれます。

例えば、数値が 000000101101 の場合、2進表現中の「1」は4つあるため、結果は 4 となります。

解法のアプローチ

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

  • 数値を2進数の文字列に変換する
  • カウンタ変数 count を 0 で初期化する
  • 2進数文字列の各文字 e について処理を行う
    • 文字が「1」であれば、count を 1 増やす
  • 最後に count を返す

実装例

それでは、実際のコードを見て理解を深めましょう。

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        n = str(bin(n))
        one_count = 0
        for i in n:
            if i == "1":
                one_count += 1
        return one_count

num = int("000000101101", 2)
ob1 = Solution()
print(ob1.hammingWeight(num))

入力

num = "000000101101"

出力

4

より簡潔な書き方

Pythonでは、文字列の count() メソッドを使うことで、上記のループ処理を1行にまとめることもできます。

def hammingWeight(n):
    return bin(n).count("1")

さらに、Python 3.10以降では、整数型に組み込みの bit_count() メソッドが追加されており、これを使えば最もシンプルに記述できます。

def hammingWeight(n):
    return n.bit_count()

状況に応じて、可読性とパフォーマンスのバランスを考慮して最適な方法を選びましょう。

  1. Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方

    階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換

  2. 正の整数のビットを反転するPythonプログラムの書き方

    Pythonで正の整数のビット順を逆にするには、まず bin() 関数を使って数値を2進数に変換します。bin() は変換結果の先頭に「0b」というプレフィックスを付加するため、その最初の2文字を除外し、残りの部分を反転させます。さらに、指定されたビットサイズに合わせて、反転した文字列の末尾に0を補完します。最後に、反転した2進数の文字列を整数へと変換し直すことで、ビットが反転された値が得られます。 アルゴリズム integernumber(n, bit_size) /* n は対象の数値、bit_size はビットサイズ */ ステップ1: まず bin() 関数で数値を2進数に変換する。