Pythonで0と1のバイナリリストを整数(10進数)に変換する2つの方法
Pythonでは、0と1で構成される2進数のリストを10進数の整数に変換したい場面がよくあります。例えば、センサーデータや画像処理などでビット列を扱う際に必要となる処理です。本記事では、int()関数を使う方法とビット左シフト演算子を使う方法の2つのアプローチを、サンプルコードと実行結果付きでわかりやすく解説します。
方法1:int()関数を使う
int()関数は2つの引数を受け取ることができ、第2引数で入力の基数を指定できます。構文は以下のとおりです。
int(x, base=10) 数値または文字列 x から整数オブジェクトを生成して返します。
以下の例では、まずリストの各要素を文字列に変換し、join()メソッドで連結して1つの2進数形式の文字列を作成します。その後、基数2を指定してint()関数に渡すことで、10進数の整数へ変換しています。
サンプルコード
List = [1, 1, 0, 1, 0, 1]
print("リストの内容 : " + str(List))
# バイナリリストから整数への変換
result = int("".join(str(i) for i in List), 2)
# 結果の出力
print("変換結果 : " + str(result))
実行結果
リストの内容 : [1, 1, 0, 1, 0, 1] 変換結果 : 53
ポイントは第2引数の「2」です。これにより文字列「110101」が2進数として解釈され、10進数の「53」へ正しく変換されます。
方法2:ビット左シフト演算子を使う
ビット左シフト演算子(<<)とビットごとのOR演算子(|)を組み合わせると、リストを先頭から順に走査しながら直接整数を組み立てることができます。
処理の流れは次のとおりです。
- 現在の結果を1ビット左にシフトし、既存のビットを1桁上にずらす
- ビットごとのOR演算で、現在処理中の桁の値(0または1)を最下位ビットに追加する
- forループでリスト内のすべての桁に対してこの操作を繰り返す
サンプルコード
List = [1, 0, 0, 1, 1, 0]
print("リストの内容 : " + str(List))
# バイナリリストから整数への変換
result = 0
for digits in List:
result = (result << 1) | digits
# 結果の出力
print("変換結果 : " + str(result))
実行結果
リストの内容 : [1, 0, 0, 1, 1, 0] 変換結果 : 38
まとめ
どちらの方法でも同じ結果が得られますが、それぞれ特徴があります。
- int()関数:一度文字列へ変換するため処理の流れが直感的で読みやすい。簡潔なコードで書きたい場合におすすめです。
- ビット左シフト演算子:文字列を介さずビット操作だけで完結するため、大量のデータを扱う場合やパフォーマンスが重視されるケースに有効です。
用途や可読性の要件に応じて、最適な方法を選択してください。
-
Pythonでローマ数字を整数に変換する方法を解説
ローマ数字とはローマ数字は、以下のような記号を使って数値を表現します。記号値I1V5X10L50C100D500M1000ローマ数字の基本的なルールローマ数字の読み方を詳しく見てみましょう。たとえば「II」は2を表します。これは「I」が2つ足し合わされているためです。「XII」であれば X + II = 10 + 2 = 12 となります。しかし、4は「IIII」ではなく「IV」と表記されます。ここが少し注意が必要なポイントです。ローマ数字には減算則と呼ばれる特別なルールがあります。「I」は「V(5)」や「X(10)」の前に置かれると、それぞれ 4 と 9 を表します(IV = 4、IX =
-
Pythonのbin()関数の使い方:10進数を2進数に変換する方法
Pythonのbin()関数は、10進数の整数を2進数(バイナリ)表現の文字列に変換する組み込み関数です。引数には正の整数でも負の整数でも指定できます。構文bin()関数の基本的な構文は以下のとおりです。bin(n) 引数:変換対象となる整数 戻り値:整数またはintオブジェクトを2進数表現した文字列 例外:引数にfloat型(浮動小数点数)を渡すとTypeErrorが発生します次の例では、正の整数と負の整数をそれぞれ2進数に変換しています。結果には「0b」という接頭辞が付き、それが2進数表現であることを示します。使用例n = input(Enter an integer :") d