Python 内包表記
Python の内包表記は、あるデータ列から別の新しいデータ列の構造体を構築する独特のデータ処理方法です。
Python の内包表記は、リスト、辞書、集合、ジェネレータを生成するのに適した、強力かつ簡潔な構文です。
内包表記を使用する際は、可読性に注意し、式を簡潔に保つようにしてください。コードの可読性と保守性に影響を与えないためです。
Python はさまざまなデータ構造の内包表記をサポートしています:
- リスト(list)内包表記
- 辞書(dict)内包表記
- 集合(set)内包表記
- タプル(tuple)内包表記
リスト内包表記
リスト内包表記の形式は次のとおりです:
[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] 或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition]
- out_exp_res:リストの要素を生成する式で、戻り値のある関数でもかまいません。
- for out_exp in input_list:input_list を反復処理し、out_exp を out_exp_res 式に渡します。
- if condition:条件文で、リスト内の条件に合わない値をフィルタリングできます。
長さが3以下の文字列を除外し、残りを大文字に変換します:
例
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']
30以内で3で割り切れる整数を計算します:
例
>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
辞書内包表記
辞書内包表記の基本形式:
{ key_expr: value_expr for value in collection }
或
{ key_expr: value_expr for value in collection if condition }
文字列とその長さを使用して辞書を作成します:
例
listdemo = ['Google','サンプル', 'Taobao']
# リスト内の各文字列をキー、その文字列の長さを値として、キーと値のペアを作成します
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'サンプル': 6, 'Taobao': 6}
# リスト内の各文字列をキー、その文字列の長さを値として、キーと値のペアを作成します
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'サンプル': 6, 'Taobao': 6}
3つの数値を与え、その3つの数値をキーとし、その2乗を値として辞書を作成します:
例
>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>
集合内包表記
集合内包表記の基本形式:
{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }
数値 1,2,3 の平方を計算します:
例
>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}
>>> setnew
{1, 4, 9}
abc ではない文字を判定して出力します:
例
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>
タプル内包表記(ジェネレータ式)
タプル内包表記は、range 区間、タプル、リスト、辞書、集合などのデータ型を利用して、指定した要件を満たすタプルをすばやく生成できます。
タプル内包表記の基本形式:
(expression for item in Sequence ) 或 (expression for item in Sequence if conditional )
タプル内包表記の使い方はリスト内包表記とまったく同じですが、タプル内包表記は()丸括弧で各部分を括るのに対し、リスト内包表記は角括弧を使います。[]、また、タプル内包表記が返す結果はジェネレータオブジェクトです。
例えば、次のコードを使用して、数値 1〜9 を含むタプルを生成できます:
例
>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返すのはジェネレータオブジェクトです
>>> tuple(a) # tuple() 関数を使用すると、ジェネレータオブジェクトを直接タプルに変換できます
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返すのはジェネレータオブジェクトです
>>> tuple(a) # tuple() 関数を使用すると、ジェネレータオブジェクトを直接タプルに変換できます
(1, 2, 3, 4, 5, 6, 7, 8, 9)