室村日記

プログラミング初心者のメモ書きです

Pythonで2進法方のリストを作る

Pythonで二進法の各桁を各要素とするようなリストをつくって,降順に出力することを考えました.
その際,文字列の各要素のリスト化や文字列のゼロパディングなど,いくつか覚えておきたい操作があったのでメモしておきます.

操作

数値型のリストのソート

a = [0,3,4,2,1]

# 昇順
sorted(a)
#降順
sorted(a, reverse = True)

文字列の各文字を要素に持つリストをつくる

s  = "abcde"

#リスト化
list(a)

これを応用して,何桁かの数字を各桁を要素に持つリストにバラしたい場合は

a = 12345

# リスト化
map(int, list(str(a)))

二進数に変換

a = 31
format(a, 'b')

出力はstr型になるのに注意が必要です.

文字列の0埋め

"20"
"123"
"02"

#4桁にそろえる
"0020"
"0123"
"0002"

にしたいという話です.

a = "20"
a.zfill(4)

サンプルスクリプト

l  = 4
f = 2**l-1
for i in range(2**l):
    ff = list(map(int,list(format(f,'b').zfill(l))))
    print(ff)
    f-=1
[1, 1, 1, 1]
[1, 1, 1, 0]
[1, 1, 0, 1]
[1, 1, 0, 0]
[1, 0, 1, 1]
[1, 0, 1, 0]
[1, 0, 0, 1]
[1, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 0]
[0, 1, 0, 1]
[0, 1, 0, 0]
[0, 0, 1, 1]
[0, 0, 1, 0]
[0, 0, 0, 1]
[0, 0, 0, 0]

こんな感じにでてきます.
なんか無駄が多い気がしますが……


あとがき

競技プログラミング初心者(2日)です.
あくまで練習のために始めたので,競プロに取り組む上ではどうも邪道らしいんですが,Pythonでやっていきたいと思います.

今回は上で作ったリストをフラグとして使ったのですが,結局,TLEが出てしまって方向転換を余儀なくされました.