座標圧縮とは
値が何番目に小さいかをナンバリングする。
例えば、下記のX座標が何番目に小さいかを知りたい時に使う。
元の並び順を維持したままいける。
X = [8, 50, 33, 33, 33, 12, 1, 777]#1 4 3 3 3 2 0 5
ソースコード
重複を集合で除去 ➯ 連想配列に{key=圧縮前, value=圧縮後}を格納 ➯ 圧縮前配列をkeyにして、圧縮後連想配列を参照
#X座標の配列 X = [8, 50, 33, 33, 33, 12, 1, 777] # 重複除去&ソート B = sorted(set(X)) # [1, 8, 12, 33, 50, 777] # 昇順で何番目かを連想配列のvalueに記録。key:圧縮前の座標 value:圧縮後の座標(何番目) ranking = { before: i for i, before in enumerate(B) } # {1: 0, 8: 1, 12: 2, 33: 3, 50: 4, 777: 5} # 元の順番を維持したまま、座標圧縮 for Xi in X: print(ranking[Xi], end=" ") #1 4 3 3 3 2 0 5
例題
正に座標を圧縮する問題。