初めてteratailで質問します。至らない点があるかもしれませんが宜しくお願いします。
###知りたいこと
Python
1#以下のようなhoge_listからhoge_dictを作りたい 2#なるべく早い方法で 3hoge_list = ['a','b','b','a','c','a'] 4hoge_dict ={'a': 3, 'b': 2, 'c': 1}
Pythonであるコーパスを用いてN-gramの作成を行っています。
N-gramの作成(hoge_list)はできましたが, その後にそれぞれの要素数を数える(hoge_dictを作る)際に結構な時間が掛かります。N-gramの要素数を数える処理のなるべく早い方法を教えて頂きたいです。
現在, 以下のような方法でhoge_dictを作成しています。
該当のソースコード
Python
1hoge_list = ['a','b','b','a','c','a'] #ある文を1文字ずつ分割したリスト 2empty = list() #空のリストを用意 3hoge_dict = {} #初期化 4while hoge_list != empty: #hoge_listが空になるまで繰り返す 5 key = hoge_list[0] #リストの0文字目をkeyに代入 6 cnt = hoge_list.count(key) #リスト内のkeyと同じ要素のカウント 7 hoge_dict[key] = cnt #0文字目をキー, 要素数を値とする辞書の作成 8 hoge_list = [s for s in hoge_list if s != key] #リスト内からkeyと同じ要素をすべて消す
実現したいこと
上記のようなサイズの小さいリストであればすぐに処理できますが, サイズが大きくなったり要素そのものの数が増えたりするとかなりの時間が掛かってしまいます。
実現したいこととしては, 「与えられたリストからそれぞれの要素とその要素数が分かる」ということなので, 必ずしも辞書を作成する必要はないかもしれませんが, 現時点での私の知識ではこれが精一杯です。
何か他にこれを実現でき, なおかつ早い方法はあるでしょうか?
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 11:55 編集