Python初心者です。拙い質問ですがお目通しいただければ幸いです。
実現したいこと
予め変更する桁を指定しておいたビットを用意しておき、後に生成するビットで上書きしたい。例えば
bit = "00110011" n = "1011"
という二つのビットがあった場合、bit
の1
の部分を 左から順に 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 コメント