ひるあんどんブログ

色々なことに手を出してみるブログ

Common Words

単語の検査を続けましょう。あなたはコンマで区切られた2つの文字列が与えられます。 それらの文字列に共通するものは何かを探してください。それらの単語は同じ文字列では繰り返しません。

あなたの関数は両方の文字列に出現するすべての単語を探す必要があります。 結果はコンマで区切られた単語群の文字列でアルファベット順である必要があります。

入力 2つの文字列の引数

出力 共通する単語を文字列として出力する

checkio("hello,world", "hello,earth") == "hello"

checkio("one,two,three", "four,five,six") == ""

checkio("one,two,three", "four,five,one,two,six,three") == "one,three,two"


どうやって使われるか ここではあなたは文字列と集合(set)をどのように扱うかを学ぶことができます。 この知識は言語の解析に有用かもしれません。

事前条件
それぞれの文字列は10単語以上は含みません。
すべての単語はコンマで区切られています。
すべての単語は小文字のラテン文字で構成されています。

def checkio(first, second):
    first = first.split(',')
    second = second.split(',')
    set1 = set(first)
    set2 = set(second)
    
    new_set = sorted(set1 & set2)
    
    return (',').join(new_set)

#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
    assert checkio("hello,world", "hello,earth") == "hello", "Hello"
    assert checkio("one,two,three", "four,five,six") == "", "Too different"
    assert checkio("one,two,three", "four,five,one,two,six,three") == "one,three,two", "1 2 3"

まずは与えられた文字列をsplitをつかって、カンマごとに区切る。これで、単語のリストができる。

次にこのリストの集合を作成。

2つの集合の、共通部分は&で取り出せる。set関数については長いので、URLだけ貼っておこうっと。

4. 組み込み型 — Python 3.4.3 ドキュメント

演算子はsetだけにしか有効じゃないけど、関数は任意のイテラブルとれるみたいだ。こっちのほうが汎用性は高い。


共通部分は取り出せたので、あとはアルファベット順にソート。

最後に単語をjoinでカンマつけて、くっつけて返す。

おしまい


clear 1位


def checkio(first, second):

    """

    set data type has useful methods.

    """

    first_set, second_set = set(first.split(",")), set(second.split(","))

    common = first_set.intersection(second_set)

    return ",".join(sorted(common))

関数を使っている。ただ、これsecondをsetにする必要ない気がする。イテラブルなら、OKなんだから、second.split(",")だけでおkでは…。


def checkio(first, second):

    same_words = set(first.split(',')).intersection(second.split(','))

    return ','.join(sorted(same_words))

と思ったら、三位の人の解答にあった。やったー。