Pythonのタプルとジェネレータ

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)

よっさん
  • よっさん
  • 当サイトの管理人。ニューヨークの大学を飛び級で卒業。その後某日系IT企業でグローバル案件に携わる。マレーシアに1.5年赴任した経験を持つ。バイリンガルITエンジニアとしていかに楽に稼ぐか日々考えている。

コメントする

メールアドレスが公開されることはありません。