Classの利用について
自作でngramの関数を作成し、そのngramから生成されたリストから同様のものをすべて消すためにget_unique_listなる関数を使って以下のリストを変換しました。
python
1abc = 'ppppaaappff' 2 3def ngram(list05,n): 4 list05_new = [] 5 for i in range(len(list05)-n+1): 6 a = [] 7 for k in range(n): 8 a += list05[i+k] 9 list05_new.append(a) 10 return list05_new 11 12print(ngram(abc,2))
結果
[['p', 'p'], ['p', 'p'], ['p', 'p'], ['p', 'a'], ['a', 'a'], ['a', 'a'], ['a', 'p'], ['p', 'p'], ['p', 'f'], ['f', 'f']]
python
1def get_unique_list(seq): 2 seen = [] 3 return [x for x in seq if x not in seen and not seen.append(x)] 4print(get_unique_list(ngram(abc,2)))
結果
[['p', 'p'], ['p', 'a'], ['a', 'a'], ['a', 'p'], ['p', 'f'], ['f', 'f']]
この二つの関数を二つが独立して存在していると使いにくいと考えたのでClassを用いて一つにしたいと考えました。
python
1class ngram_unique_list(): 2 def __init__(self,data): 3 self.data = data 4 5 def ngram(self,n): 6 data_new = [] 7 for i in range(len(self.data)-n+1): 8 a = [] 9 for k in range(n): 10 a += self.data[i+k] 11 data_new.append(a) 12 return data_new 13 14 def get_unique_list(self): 15 seen = [] 16 return [x for x in ngram(self,n) if x not in seen and not seen.append(x)] 17 18abc = 'ppppaaappff' 19a = ngram_unique_list(abc) 20a.ngram(2)
結果
[['p', 'p'], ['p', 'p'], ['p', 'p'], ['p', 'a'], ['a', 'a'], ['a', 'a'], ['a', 'p'], ['p', 'p'], ['p', 'f'], ['f', 'f']]
しかし、以下のようなコードを実行すると以下のようなエラーを吐かれてしまいます。
python
1a.get_unique_list()
結果
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-59-632d6aa19c2f> in <module>() 18 abc = 'ppppaaappff' 19 a = ngram_unique_list(abc) ---> 20 a.get_unique_list() <ipython-input-59-632d6aa19c2f> in get_unique_list(self) 14 def get_unique_list(self): 15 seen = [] ---> 16 return [x for x in ngram(self,n) if x not in seen and not seen.append(x)] 17 18 abc = 'ppppaaappff' NameError: name 'n' is not defined
正直おかしいと思いながらもこのコードを書いているのですが上記の二つの関数をclassでまとめて使う有効な方法はないでしょうか?
また、そうではないとしても、定義した関数をうまくまとめるないし使いやすい状態で保存しておく方法は他にありますでしょか?
雑な質問になってしまっている点非常に申し訳ありませんがもし教えて頂けると嬉しいです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/04 05:03