週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

一致した文字をソートして出力[Pythom3.0]


f:id:aisakakun:20160220154819j:plain

文字列というよりも”文字”をソートして出力するというもの。

今回の入力は

"I,am,Christmas","I,are,lattice"

という、文字ごとに","で区切ってあるというもの。

今までの学習から導いた私の答えがこちら。

def checkio(first, second):

    matched_list = []
    for fi in first.split(","):
        for se in second.split(","):
            if fi == se:
                matched_list.append(fi)
    return ",".join(sorted(matched_list))

そして、頭で構想しながらも実現しなかったものを実現させていた例がこちら。

def checkio(first, second):
    return ','.join(sorted(set(first.split(",")) & set(second.split(","))))

これを見て思ったのが、 

set 関数とはなんだ? そして、"&"って使えるのか...ということ。

 

いろいろ調べてみて、なるほど。

set関数には、

・重複するものを除外(もしくは追加しない)という役割

論理積論理和などを用いることができる

・順番もソートする

という特徴があるらしい。

実際にIPythonでやってみました。

In [43]: a = [1,5,2]

 

In [44]: set(a)

Out[44]: {1, 2, 5}

 

In [45]: set(a)

Out[45]: {1, 2, 5}

 

In [46]: set(a)

Out[46]: {1, 2, 5}

 

In [47]: a = ["a","ab","ba","aab"]

 

In [48]: set(a)

Out[48]: {'a', 'aab', 'ab', 'ba'}

 順番は保証されないということが他のサイトに書いてあったので、2回同じsetの動作をしましたが、ここでソートしているだけということに気がつき、文字でもソートするのかどうか試してみました。

 

なるほど、便利。

ならば、sortedのところをsetに変えても大丈夫なのではないかと思いましたが、

無理でした。

なぜなのか....今はちょっとわからないので、分かり次第追記いたします。