沖の雑記帳

基本的には趣味に絡んで雑多な内容を色々と

内包表記の条件分岐覚書

仕事でPythonを使うようになったのでこれまで惰性で書いてた部分も含めて勉強中 pythonの内包表記でのif文やifelse文の使い方がいつも思い出せなくなって毎回調べてるのでメモ

まずは元のデータ あるバイナリデータからオフセットのリストを取り出したもの

print(ofslist)
(512, 20992, 25088, 26112, 36352, 39424, 40448, 44544, 45568, 56832, 60416, 60928, 62464, 62976, 63488, 64000, 64512, 67072, 67584, 68096, 69120, 81408, 81920, 83456, 84992, 87552, 88064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

ifを使用 0より大きい部分だけ欲しい

print([x for x in ofslist if x > 0])
[512, 20992, 25088, 26112, 36352, 39424, 40448, 44544, 45568, 56832, 60416, 60928, 62464, 62976, 63488, 64000, 64512, 67072, 67584, 68096, 69120, 81408, 81920, 83456, 84992, 87552, 88064]

if~elseを使用 基本的に前詰めで入ってるはずだけど、異常データで途中に0があると解析転けるから数値じゃないデータを入れておきたい 今回はとりあえず'No Data'に置き換えた

print([x if x > 0 else 'No data' for x in ofslist])
[512, 20992, 25088, 26112, 36352, 39424, 40448, 44544, 45568, 56832, 60416, 60928, 62464, 62976, 63488, 64000, 64512, 67072, 67584, 68096, 69120, 81408, 81920, 83456, 84992, 87552, 88064, 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data', 'No data']