TIL

Today I Learned. 知ったこと、学んだことを書いていく

06. 集合

"paraparaparadise"と"paragraph"に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,'se'というbi-gramがXおよびYに含まれるかどうかを調べよ.

Pythonでやった

今回は set を使って解く問題だった

#!/bin/usr/env python

'''
    06. 集合
    "paraparaparadise"と"paragraph"に含まれる文字bi-gramの集合を,それぞれ,
    XとYとして求め,XとYの和集合,積集合,差集合を求めよ.
    さらに,'se'というbi-gramがXおよびYに含まれるかどうかを調べよ.
'''


def ngram(sequence, n=2):
    rtnngram = []
    for i in range(len(sequence)-n+1):
        rtnngram.append(sequence[i:i+n])

    return rtnngram


def main():
    X = set(ngram('paraparaparadise', 2))
    Y = set(ngram('paragraph', 2))

    print('X: ', X)
    # X:  {'is', 'di', 'ap', 'se', 'ar', 'ra', 'pa', 'ad'}
    print('Y: ', Y)
    # Y:  {'gr', 'ap', 'ar', 'ra', 'pa', 'ag', 'ph'}
    print('和集合: ', X | Y)
    # 和集合:  {'is', 'di', 'gr', 'ap', 'ph', 'se', 'ar', 'ra', 'pa', 'ag', 'ad'}
    print('積集合: ', X & Y)
    # 積集合:  {'ar', 'ap', 'ra', 'pa'}
    print('差集合: ', X - Y)
    # 差集合:  {'is', 'di', 'se', 'ad'}

    print("'se'は含まれるか: ", 'se' in X | Y)
    # 'se'は含まれるか:  True

if __name__ == '__main__':
    main()

(集合ってこの問題で使うはずだったのか...)

言語処理100本ノック 2015