内包表記でpythonのリストを作ってみよう! 初心者でも分かりやすく具体例で解説!

こんにちは。関東の大学に通う大学生ミンチ(@programminchi)です。今回はpythonの リスト(配列) で少し応用的な使い方、内包表記について説明していきます。

 

 

リストの内包表記って何?

まず、内包表記とは何なのか見ていきましょう。

もしかしたら、最近プログラミングを始めた人は聞いたことのない言葉かもしれません。

内包表記とは、1つ以上の イテレータ を使ってデータ構造を簡潔に表せる形式です。

そんな抽象的な説明じゃ分からない!そもそもイテレータってなんだよ!って感じた人も安心してください。

いくつか例を見ていくと、感覚的に理解できます。

 

実際に内包表記を使ってみよう

それでは、内包表記を実際に使ってみましょう。

リストを作ってその中に0から9までの数字を入れてみます。まずは内包表記を使わない例を見ていきましょう。

 

>>>numbers = []
>>>for i in range(10):
...    numbers.append(i)
>>>print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

まず、1行目ではnumbersというリストを作っています。

2行目、3行目はfor文です。range()関数は連続した数値を得ることができる関数ですが、今はrange(i)と書くと、0~i-1まで取り出せるものだと思っておいてください。

3行目のappend()関数は、リストの末尾に要素を追加する関数です。

append()関数についてはこちらの記事で詳しく説明しているので参考にしてみてください。

pythonでリスト(配列)を扱う上で覚えておきたい9つの関数

以上の操作でnumbersを表示してみると、リストの中に0から9の数字が順番に入っています。

 

では次に内包表記を使って同じ結果を得ましょう。

>>>numbers = [i for i in range(10)]
>>>print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

このようにたった1行で表現できてしまいます。

1つ目のiと2つ目のiは全く別物です。

1つ目のiはリストに入れる値で、2つ目のiはfor文の一部です。

分かりやすくするために以下のようにします。

>>>>>>numbers = [i+1 for i in range(10)]
>>>print(numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

つまり、for文でrange関数から要素を取り出した後に、それに1を加えてリストに入れているのです。

 

次にif文を使った内包表記を使ってみましょう。

if文を使う場合は、range()の後にif 条件式を書いてあげればよいです。

以下で例を見ていきましょう。

 

>>>numbers = [i for i in range(10) if i>5]
>>>print(numbers)
[6, 7, 8, 9]

条件としてiが5より大きい場合を指定したので6以上の要素でリストができています。

 

このように内包表記を使えば、数行のコードを1行で簡潔に表すことができます。

 

内包表記を使うメリット

ここまでリストにおける内包表記の説明をしてきましたが、なぜ内包表記を使う必要があるのでしょうか。

1番大きなメリットとして処理速度が速くなるということが挙げられます。

上の例で挙げているようなデータの少ない例ならまだいいですが、大量のデータを扱うようになると、処理速度は非常に重要な要素になってきます。

 

他にもコードの量が少なく、簡潔に記述できるというものも挙げられます。

プログラマーからしたら、慣れてくればこちらの方が簡潔に記述できて速く動いてくれるので使いやすいものになります。

 

 

まとめ

今回はpythonにおけるリストの内包表記について学んでいきました。

簡単な例で説明しましたが、今まで内包表記を使ったことがない人達は今までと違う記述の仕方に少し戸惑ったかもしれません。

最初は慣れないかもしれませんが、少しずつでいいので内包表記に挑戦してみてください!

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はツイッターの方もフォローお願いします!!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です