Python入門から応用までの学習サイト


内包表記

Pythonではリストやディクショナリをシンプルに作成する方法として内包表記があります。内包表記を用いると、複数行の記述を要する処理を1行で書けてしまうようなこともあり大変便利です。慣れていないと読みづらいと感じることもありますが、それを克服すればむしろ読みやすいと感じるはずです。

まずはリストを内包表記で作成してみましょう。 書式は次の通りです。

comp_list = [<式> for <変数> in <反復可能オブジェクト>]
# -*- coding: utf-8 -*- 

comp_list = [i for i in range(10)]

print list_comp

これは下記コードと同じ処理内容です。

# -*- coding: utf-8 -*- 

comp_list = []
for i in range(10):
    comp_list.append(i)

print comp_list

--実行結果--

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


このように本来は3行の記述が必要な処理を1行で記述することができます。上記の場合、一番左の「 i 」がリストの要素となりますが、これは式であるため次のようなこともできます。

# -*- coding: utf-8 -*- 

comp_list = [str(i * i) for i in range(10)]

print list_comp

--実行結果--

['0', '1', '4', '9', '16', '25', '36', '49', '64', '81']



次はディクショナリです。辞書内包表記とも呼ばれます。

comp_dict = {<式(key: value)> for <変数> in <反復可能オブジェクト>}
# -*- coding:utf-8 -*-

comp_dict = {str(i): i * i for i in range(10)}

print comp_dict

これは下記コードと同じ処理内容です。

# -*- coding:utf-8 -*-

comp_dict = {}
for i in range(10):
    comp_dict[str(i)] = i * i

print comp_dict

--実行結果--

{'1': 1, '0': 0, '3': 9, '2': 4, '5': 25, '4': 16, '7': 49, '6': 36, '9': 81, '8': 64}



次はセットです。集合内包表記とも呼ばれます。

comp_set = {<式> for <変数> in <反復可能オブジェクト>}
# -*- coding:utf-8 -*-


comp_set = {str(i * i) for i in range(10)}

print comp_set

これは下記コードと同じ処理内容です。

# -*- coding: utf-8 -*-

comp_set = set()
for i in range(10):
    comp_set.add(str(i * i))

print comp_set

--実行結果--

set(['25', '16', '49', '36', '1', '0', '64', '4', '9', '81'])



これまでは1つのforを内包表記で記述しましたが、ネストすることもできます。

# -*- coding:utf-8 -*-

comp_list = [i * ii for i in range(1, 10) for ii in range(1, 10)]

print comp_list

これは下記コードと同じ処理内容です。

# -*- coding:utf-8 -*-

comp_list = []
for i in range(1, 10):
    for ii in range(1, 10):
        comp_list.append(i * ii)

print comp_list

--実行結果--

[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, …中略… 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]



if文と併用し、条件を設けることもできます。

# -*- coding:utf-8 -*-

comp_list = [i for i in range(10) if i % 2 == 1]

print comp_list

これは下記コードと同じ処理内容です。

# -*- coding:utf-8 -*-

comp_list = []
for i in range(10):
    if i % 2 == 1:
        comp_list.append(i)

print comp_list

--実行結果--

[1, 3, 5, 7, 9]



タプル内包表記はありません。リストやディクショナリと同じように記述することはできますが、下記のような場合はタプルではなく ジェネレータ が作成されます。

# -*- coding:utf-8 -*-

gen = (i for i in range(10))

print gen

--実行結果--

<generator object <genexpr> at 0x000000000257B900>




Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

変数の型のチェックも出来ますよ!



確かな力が身につく
Python「超」入門




P  R