内包表記

INPUT · スライド

重複の消える入れ物

01 / 06

コロンを外すとどうなるか

前のレッスンで、中かっこ { } に キー: 値 と書くと辞書になると覚えたね。

ではコロンを外して値だけ書くとどうなるか。できるのはセットという、また別の入れ物だよ。

セットのいちばんの特徴は、同じものが1つにまとまること。下の例では "あか" が2回出てくるけれど、中身は3個になっているよ。

tanngos = ["あか", "あお", "あか", "きいろ"]iros = {t for t in tanngos}print(len(iros))

実行結果

3

02 / 06

そのまま表示してはいけない

ここでとても大事な注意。セットには順番が無い。

入れた順も、小さい順も覚えていない。だからそのまま表示すると、出てくる順が毎回同じとは限らないんだ。

中身を見たいときは、必ず sorted(...) を通して並べてから表示しよう。sorted はリストを返すので、角かっこ付きで出てくるよ。

tanngos = ["あか", "あお", "あか", "きいろ"]print(sorted({t for t in tanngos}))

実行結果

['あお', 'あか', 'きいろ']

03 / 06

3つの入れ物を見くらべる

同じ骨格で、囲む記号とコロンだけを変えた3つを並べてみよう。

  • [ 値 for ... ] … リスト(順番あり・重複あり)
  • { キー: 値 for ... } … 辞書(キーで引ける)
  • { 値 for ... } … セット(重複なし・順番なし)

中かっこは、コロンがあれば辞書・なければセット。ここだけ見分けられれば読めるよ。

kazus = [1, 2, 2, 3]print([x for x in kazus])print({x: x * 2 for x in kazus})print(sorted({x for x in kazus}))

実行結果

[1, 2, 2, 3]
{1: 2, 2: 4, 3: 6}
[1, 2, 3]

04 / 06

数を数えるのと、あるか調べるのは安全

sorted を通さないといけないのは中身を並べて見るときだけだよ。

  • len(...) で個数を数える
  • in であるかどうかを調べる

この2つは順番に関係ないので、そのまま使っていい。というより、セットはこの2つのために使うことが多いんだ。

tanngos = ["あか", "あお", "あか"]iros = {t for t in tanngos}print(len(iros))print("あか" in iros)print("みどり" in iros)

実行結果

2
True
False

05 / 06

if も足せる

うしろに if を足せるのも同じ。骨格はずっと変わっていないよ。

取り出して、絞って、変換して、囲む記号で入れ物を決める。覚えることは最初のレッスンから1つも増えていないんだ。

tanngos = ["あか", "あお", "あか", "きいろ"]print(sorted({t for t in tanngos if len(t) == 2}))

実行結果

['あお', 'あか']

06 / 06

セットそのものは第11章で

セットには、2つのセットの共通部分を取るような専用の道具もある。でもそれは第11章でまとめて扱うよ。

このレッスンで持って帰ってほしいのは、「囲む記号を変えると別の入れ物になる」という骨格の話。

角かっこならリスト、中かっこにコロンなら辞書、中かっこにコロン無しならセット。書きかたの形はどれも同じ。ここまで分かっていれば、他人のPythonを開いても内包表記で止まることはもう無いよ。