LoginSignup
0
2

More than 3 years have passed since last update.

Python 時系列 list の圧縮

Last updated at Posted at 2021-04-19

時系列 list の圧縮

目的

時系列などで各時刻のラベルを出力すると,同一のラベルが並ぶことになる.重複を取り除くことによってラベル系列を見やすくする.

簡単に言うと,

['A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'A', 'B', 'B']
['A', 'B', 'C', 'A', 'B']にしたい.

python の基本機能で実現できる.

アルゴリズム

  • リストを作成する
  • 一つずらしたリストを作成する
  • 比較して,一致していない要素でリストを作る

実験

初期設定

簡単にするために,文字列を list にする

item1 = list('AAABBCAAABB')
print('item1:', item1)
# item1: ['A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'A', 'B', 'B']

一つずらしたリスト

  • list の加算を使う
  • list のスライスを使う

list は「加算: +」 や 「乗算 *」ができる.
list のスライスは基本なので覚えておくとよい.

['_']+item1[:-1] とした.
item1[1:]+['_']でもずらすことになる.
できた list は item1 と同じ長さ.

item2 = ['_']+item1[:-1]
print('item2:', item2)
# item2: ['_', 'A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'A', 'B']

リストの比較

  • zip を使いリストをまとめる.
  • if で要素を選択

zip では要素の数を合わせておいた方が良い.

item3 = [i for i,j in zip(item1, ['_']+item1[:-1]) if i != j]
print('item3:', item3)
# item3: ['A', 'B', 'C', 'A', 'B']

動作に対する補足実験 ifで何を比較しているか確認する.

item4 = [(i,j) for i,j in zip(item1, ['_']+item1[:-1])]
item5 = [(i,j) for i,j in zip(item1, ['_']+item1[:-1]) if i != j]
print('item4:', item4)
print('item5:', item5)
# item4: [('A', '_'), ('A', 'A'), ('A', 'A'), ('B', 'A'), ('B', 'B'), ('C', 'B'), ('A', 'C'), ('A', 'A'), ('A', 'A'), ('B', 'A'), ('B', 'B')]
# item5: [('A', '_'), ('B', 'A'), ('C', 'B'), ('A', 'C'), ('B', 'A')]

まとめ

list の加算,スライスにより比較するための list を作成した.
zip を使い,if で選択することで重複を取り除いた.

python の基本機能で実現できる.

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2