LoginSignup
0
1

More than 5 years have passed since last update.

pythonの内包表記をさわりだけ

Last updated at Posted at 2019-04-04

内包表記(リスト)のソース例

解説をするよりもまずはソース例を見た方が
わかりやすいと思うので書いてみます。

inclusion.py

#通常表記
a = [9, 2, 3, 4, 8]
a_db = []
for x in a:
    a_db.append(x*2)

#内包表記
a = [1, 2, 3, 4, 5]
a_db = [x*2 for x in a]

内包表記はpython特有の機能

少なくともphpやその他メジャーな言語では
現時点ではなさそうです。
ざっと検索したところjavascriptでは
数種類の内包表記があったらしく非推奨になっておりました。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Array_comprehensions
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Generator_comprehensionsES6では新規に内包表記が追加されているので
他の言語でも今後実装されてくる可能性は0ではなさそうですね。#内包表記はイテラブルなオブジェクトから新しいデータを作る
イテラブルとはリスト、文字列、タプル、辞書などの
要素を順番にとりだせるもののことを言います。
内包表記はイテラブルなオブジェクトから新しいデータ構造を作ることができます。

条件を付与(リストの内包表記条件付き)

内包表記には条件をつけることも可能です。

Conditions.py

#通常
a = [1, 2, 21, 30, 53]
a_db = []
 for x in a:
     if x >= 20:
         a_db.append(x*2)

#内包表記
a = [1, 2, 21, 30, 53]
a_db = [x*2 for x in a if x >= 20]

#条件付きリスト内包表記の構文
{ for 変数 in イテラブルなオブジェクト if 条件式}

辞書の内包表記

以下は辞書からkeyだけを取り出して
ランダムに値を付与するというもの。

dictionary.py

#辞書の内包表記
from random import randint
keys = ['辞書', 1, '文庫', 8, '漫画']

d = { x:randint(1, 100) for x in keys if type(x) == str}
print(d)
#実行結果
#{'辞書':88, '文庫':32, '漫画':43}

#辞書の内包表記の構文
{ キー: for 変数 in イテラブルなオブジェクト if 条件式 }

集合の内包表記

集合に関しては同じ値を無視するという性質がある。

set.py

a = {2, 1, 5, -3, 5, -1, 10, 9, 13, 3, -5
setA = { x for x in a if (0 < x <= 10)}

#実行結果
#{2, 1, 5, 10, 9, 3}

#集合の内包表記の構文
{  for 変数 in イテラブルなオブジェクト (if 条件式) }

ジェネレータを内包表記で書くこともできます

javascriptでは非推奨になっていたジェネレータの内包表記ですが
pythonは標準で書くことが可能です。

generatorexpression.py

g = (x for x in range(5))

#ちなみに以下のtはリストになります。
t = [x for x in range(5)]

以下は実行結果となります。

excusionresultgeneratorexpression.py
>>> g = (x for x in range(3))
>>> print(next(g))
0
>>> print(next(g))
1
>>> print(next(g))
2
>>> print(next(g))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1