Python 入門 ノート (52)ジェネレーター内包表記

ジェネレーター内包表記

まず最初にジェネレーターを書きます。

def g():
    for i in range(10):
        yield i

0から9の数字をループ出力するジェネレーター g() を定義しています。

 

g() の型(type) を見てみます。

g = g()
print(type(g))

<class 'generator'>

ジェネレーター型と返ってきますね。

next()を使い5回出力してみます。

def g():
    for i in range(10):
        yield i

print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

0から4まで出力されます。

0
1
2
3
4

 

内包表記

これを内包表記を使って書いてみます。

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

def g():
    for i in range(10):
        yield i

g = g()

g = (i for i in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

結果はこうです。

0
1
2
3
4

出力されました。

if 分を入れる場合もこうです。

def g():
    for i in range(10):
        yield i

g = g()

g = (i for i in range(10) if i % 2 == 0)

for x in g:
    print(x)

結果は

0
2
4
6
8

注意

g = (i for i in range(10)) を一見すると g がタプルと見間違えしそうですが、注意しましょう。

タプルの場合は、tupleで括る必要があります。

g = tuple(i for i in range(10))
print(type(g))

<class 'tuple'>

 

コメント