今回は「リスト内包表記」というものに触れていきます。
簡単に言うと、
「for文を使ってリストの要素をループさせる際の記述方法の一つ」
です。
と言葉で書いても良くわからないと思うので順を追って説明していきます。
リスト内包表記
まずはおさらい
過去に連載したfor分の記載方法でリストをループさせると以下の様になります。
persons = ["田中", "佐藤", "渡邉"] for person in persons: print(person + "さん")
田中さん
佐藤さん
渡邉さん
for 変数 in (ループしたいもの) :
式
という書き方でしたね。
for文の中身を改めて説明しておきます。
1.personsから要素を一つ取り出しpersonに格納する。
2.personの中身と「さん」を結合して出力する。
3.personsから次の要素を取り出しpersonに格納する。
・
・
・
(以降要素がなくなるまで繰り返し。)
内包表記を行う際も上記の動作は変わりません。
「表記方法が変わるだけ」という事を念頭において読み進んでください。
内包表記の書き方
まずは基本の書き方
[式 for 変数 in (ループしたいもの)]
では先程のプログラムと同じ処理を内包表記で書いてみましょう。
persons = ["田中", "佐藤", "渡邉"] print("---今までのfor---") for person in persons: print(person + "さん") print("---リスト内包表記---") [print(person + "さん") for person in persons]
—今までのfor—
田中さん
佐藤さん
渡邉さん
—リスト内包表記—
田中さん
佐藤さん
渡邉さん
この様に同じ結果になったことがわかると思います。
今までforと登場する項目(変数、ループしたいもの、式)も同じですが、
記載する順番が異なるという点だけはしっかり抑えておきましょう。
ちなみに・・・
上記の例ではループ毎に画面に出力していましたが、変数に格納することも可能です。
persons = ["田中", "佐藤", "渡邉"] new_persons = [person + "さん" for person in persons] print(new_persons)
変数に格納した場合は、値が上書きされたり連結されたりするのではなく、
配列として格納されていくということを覚えておきましょう。
おまけ
本記事の中で再三「(ループしたいもの)」という言葉が出てきましたが、
正しい呼び名が別にあります。
iterable(イテラブル)
です。
繰り返し可能なオブジェクトをiterableと呼び、
リストだけでなく、 range・タプル・集合・辞書・文字列などもイテラブルに含まれます。
繰り返し可能ということで、これらはfor文でループさせる事ができます。
まとめ
内包表記とは。
イテラブルを使ったfor文の別表記方法。
確認問題
1.以下のfor文を内包表記で書いてみましょう。
nums = [12, 34, 56] for num in nums: print(num*2)