【Python】言語処理100本ノック2020 06. 集合
問題
“paraparaparadise”と”paragraph”に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,’se’というbi-gramがXおよびYに含まれるかどうかを調べよ.
コード
def nGramWord(text, num): #スライス result = [text[index : index+num ] for index in range(len(text)-num+1)] return result #n_Gramに入れる X = nGramWord("paraparaparadise", 2) Y = nGramWord("paragraph",2) print("Xのデータ:" + str(X)) print("Yのデータ"+ str(Y)) #set型のデータ print("和集合") print(set(X) | set(Y)) print("積集合") print(set(X) & set(Y)) print("差集合") print(set(X) - set(Y)) #'se'が含まれているかどうかの確認 print("Xに'se'は含まれているか?:" + str('se' in X)) print("Yに'se'は含まれているか?:" + str('se' in Y))
n-gramを作るプログラムは05.n-gramと同じなので省略します。
問題は、和集合・積集合・差集合です。
ここにやはりお世話になりました。
set型は重複しない要素(同じ値ではない要素、ユニークな要素)のコレクションで、和集合、積集合、差集合などの集合演算を行うことができる。
ふむふむ。
どうやら和集合、積集合、差集合の演算を行うためにはset型を使うようなので、
print("和集合") print(set(X) | set(Y)) print("積集合") print(set(X) & set(Y)) print("差集合") print(set(X) - set(Y))
set型のデータにキャスト変換。
あとは、和を求めるためには |を使い、
積を求めるために、&、
そして差を求めるために、/を使って完了です。
#'se'が含まれているかどうかの確認 print("Xに'se'は含まれているか?:" + str('se' in X)) print("Yに'se'は含まれているか?:" + str('se' in Y))
残りは、seが含まれているかの確認で、 inを使えば簡単に出すことができました。
以上、言語処理100本ノック2020 06. 集合でした!
もっと良いコードがあればぜひ教えて下さい。m( )m