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()
状況に応じて、可読性とパフォーマンスのバランスを考慮して最適な方法を選びましょう。
-
Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方
階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換
-
正の整数のビットを反転するPythonプログラムの書き方
Pythonで正の整数のビット順を逆にするには、まず bin() 関数を使って数値を2進数に変換します。bin() は変換結果の先頭に「0b」というプレフィックスを付加するため、その最初の2文字を除外し、残りの部分を反転させます。さらに、指定されたビットサイズに合わせて、反転した文字列の末尾に0を補完します。最後に、反転した2進数の文字列を整数へと変換し直すことで、ビットが反転された値が得られます。 アルゴリズム integernumber(n, bit_size) /* n は対象の数値、bit_size はビットサイズ */ ステップ1: まず bin() 関数で数値を2進数に変換する。