問. “paraparaparadise”と”paragraph”に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,’se’というbi-gramがXおよびYに含まれるかどうかを調べよ.
解答例
#前問のngramを使いまわす
def ngram(n, lst):
return list(zip(*[lst[i:] for i in range(n)]))
#対象となる文字列の定義
str1 = 'paraparaparadise'
str2 = 'paragraph'
#setを使って集合を定義する
X = set(ngram(2, str1))
Y = set(ngram(2, str2))
#集合の演算を行う
union = X | Y
intersection = X & Y
difference = X - Y
#集合の表示
print('X:', X)
print('Y:', Y)
print('和集合:', union)
print('積集合:', intersection)
print('差集合:', difference)
#「<=」で部分集合について判定している
print('Xにseが含まれるか:', {('s', 'e')} <= X)
print('Yにseが含まれるか:', {('s', 'e')} <= Y)
出力
X: {('a', 'd'), ('r', 'a'), ('a', 'p'), ('i', 's'), ('a', 'r'), ('p', 'a'), ('s', 'e'), ('d', 'i')}
Y: {('r', 'a'), ('a', 'p'), ('a', 'r'), ('g', 'r'), ('p', 'a'), ('p', 'h'), ('a', 'g')}
和集合: {('a', 'd'), ('r', 'a'), ('a', 'p'), ('i', 's'), ('a', 'r'), ('g', 'r'), ('p', 'a'), ('s', 'e'), ('p', 'h'), ('a', 'g'), ('d', 'i')}
積集合: {('a', 'p'), ('p', 'a'), ('a', 'r'), ('r', 'a')}
差集合: {('s', 'e'), ('a', 'd'), ('d', 'i'), ('i', 's')}
Xにseが含まれるか: True
Yにseが含まれるか: False
参考リンク
Python, set型で集合演算(和集合、積集合や部分集合の判定など)
0 件のコメント:
コメントを投稿