Hyurakuのエンジニア日誌

SE出身Webエンジニアのブログ

pythonの内包記法の解説。 #11

趣味でPythonを書いていた時リストを簡単に書ける記法について学んだ。
今日はその記法である内包記法について解説する。

0. 内包表記とは

リストや辞書型のオブジェクトを生成するための構文構造。 1行でリストを作成できる。

1. リスト型

基本的な内包記法は次のように書く。
`[ 変数に対して一列に行う処理for変数in変数の範囲]``

セット型の場合は[]で囲むこと。

> list_a = [i *2 for i in range(5)]
> print(list_a)
[0,2,4,6,8]

2. セット型

セット型の場合は{}で囲むこと。

> set_a = {i *2 for i in range(5)}
> print(set_a)
{0,2,4,6,8}

3. ジェネレータ

ジェネレータの場合は()で囲むこと。

> gene_a = (i *2 for i in range(5))
> print(gene_a)
<generator object <genexpr> at 0x10a134ca8>

>for i in gene_a:
...   print(i)
0
2
4
6
8

4. 辞書型

辞書型の場合は{}で囲むこと。
なお、辞書型のデータを扱っているので、keyとvalueを設定する必要がある。

> day=['Mon','Tue','Wed']
> drink=['beer','cola','water']

> dict_a={x:y for x,y in zip(day,drink)}
> print(dict_a)
{'Mon': 'beer', 'Tue': 'cola', 'Wed': 'water'}

5. その他

  • リスト型の内包記法でも制御構文が書ける。
> list_b = [i for i in range(10) if i%2==0]
> print(list_b)
[0, 2, 4, 6, 8]
  • 変数はひとつに指定しよう。
    やろうと思えば、複数の変数を指定しての内包記法は可能だが、 可読性が低くなってしまう。
> p=(1,2,3,4)
> q=(5,6,7,8,9)

> list_c=[i*j for i in p for j in q]
> print(list_c)
[5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 18, 21, 24, 27, 20, 24, 28, 32, 36]