効率的にビットの中間部の値を変更する方法

Python初心者です。拙い質問ですがお目通しいただければ幸いです。

実現したいこと

予め変更する桁を指定しておいたビットを用意しておき、後に生成するビットで上書きしたい。例えば

bit = "00110011" n = "1011"

という二つのビットがあった場合、bit1の部分を 左から順に nのビットに上書きしていきたい。

00110011 &) 10 11 ----------- 00100011

書いたコード

桁が異なるビット同士をうまく整列させて論理積 &を求める方法がわからなかったのでリスト内包表記を使い、ifの分岐で対応した。

Main.py

import itertools import time H, W = 5, 5 # グリッドのサイズ time_sta = time.perf_counter() for _ in range(100000): c = itertools.count(0) bit = "00110011" n = "1011" lst1 = list(bit) lst2 = list(n) new_bit = [i if i == "0" else lst2[next(c)] for i in lst1] new_bit = "".join(new_bit) #print(new_bit) time_end = time.perf_counter() tim = time_end- time_sta print("実行時間:", tim) # 実行時間表示

問題点

しかしリスト内包表記を使ってしまう影響で forと併用したり、ビットの桁数が増えると処理が長くなってしまう。

Console

実行時間: 0.14450603909790516

質問

そこで質問なのですが、

  • 上記の処理をリスト内包表記無しで再現できるか
  • 若しくは簡易的なメソッドなどは無いか

以上二点をお聞きしたいです。回答よろしくお願いします。

コメントを投稿

0 コメント