1. TOP
  2. プログラム
  3. ソフト
  4. python
  5. 内包表記

内包表記

2019-04-28_133002_RM3

内包表記

ひとつ以上のイテレーターからPythonでーた構造をコンパクトに作れる
形式。内包表記を使えば、ループや条件テストを寡黙な構文で結合できる

リスト内包表記

1から5までの整数のリスト-1

>>>number_list = []
>>>number_list.append(1)
>>>number_list.append(2)
>>>number_list.append(3)
>>>number_list.append(4)
>>>number_list.append(5)
>>>number_list
>>>print(number_list)

[1, 2, 3, 4, 5]

forループとrange()関数でも作れる

>>>number_list = []
>>>for number in range(1,6):
>>> number_list.append(number)

>>>print(number_list)

[1, 2, 3, 4, 5]

リスト内包表記を使った方がPython らしくなる

>>>number_list = [number for number in rang(1,6)]

>>>print(number_list)

[1, 2, 3, 4, 5]

[ expression for item in iterzble if condition]

1から5までの奇数だけのリスト

number_list = [number for number in range(1,6) if number % 2 == 1]

[1, 2, 3, 4, 5]

ループをねすとできるのと同じように、内包表記でもfor...節
を複数使うことができる。
まず、古くからのネスト

>>>rows = range(1,4)
>>>cols = range(1,3)
>>>for row in rows:
>>> for col in cols:
>>> print(row, col)

1 1
1 2
2 1
2 2
3 1
3 2

内包表記を使って結果を(row. col)形式のタプルにしてcells変数に
代入する
>>>rows = range(1,4)
>>>cols = range(1,3)
>>>cells = [(row,col) for row in rows for col in cols]
>>>for cell in cells:
>>> print(cell)

(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)

タプルのアンパックを使って、cllsリストを反復処理しながら
row,colを引き抜くこともできる

>>>for row,col in cells:
>>> print(row, col)

1 1
1 2
2 1
2 2
3 1
3 2