Pythonのタプルとジェネレータ
2022/3/16 2022/4/15
Pythonのデータ分析試験の勉強をしていますが、参考書を読んでいたらややこしいものが出てきました。
ジェネレータとは
ジェネレータとは、値をひとつずつ出してくれるリストのような感じのものです。例えば、内包表現でlist = [x for x in range(1000000)]
としてしまうと、この大量データに対して大量のメモリを確保する必要があります。
それにより場合によっては、サーバがフリーズしたり、処理が物凄く遅くなったりします。ジェネレータを使えば1つずつ値を取り出せます。
ジェネレータとタプルの比較
内包表現でジェネレータを生成するわけですが、知らないとタプルを生成しているように見えます。私もそうでした。
タプルを作成する際はtuple()
を使用する必要があるようです。
# Create Generator
gen = (x for x in range(10))
print(type(gen))
print(gen)
print(next(gen), next(gen), next(gen))
print(r"Thus, gen generates a value as it's called.")
print("---")
# Create Tuple
tup = tuple(x for x in range(10))
print(type(tup))
print(tup)
# <class 'generator'>
# <generator object <genexpr> at 0x7f2b14ed5550>
# 0 1 2
# Thus, gen generates a value as it's called.
# ---
# <class 'tuple'>
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)