generator関数を使う
たとえば、4桁の0と1の並びを考えます。0000とか0101とか1111などですが、全部で2の4乗で16通りあります。これらすべての組合せについて、羅列してくれるコードをPythonで書きたいと思ったときは、generator関数が便利です。

# python2.6 or higher
def bernoulli_str(upto):
 startat = 0
 endto = 2 ** upto - 1
 while startat <= endto:
  yield format(startat,'b').zfill(upto)
  startat += 1

if __name__ == '__main__':
 for v in bernoulli_str(4):
  print(v)

出力
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

桁数を増やすとあっという間に組合せ爆発を起こすので、yieldを使ったgeneratorを使うことで、メモリに入り切らなくなってしまう事態を回避できます。桁数がそろった方が見栄えがいいので、zfillで0詰めしています。
やっぱり、Pythonはとっても便利で使いやすいと実感しますが、GoogleがGoを出したり、iPhoneのおかげでObjective-Cの人気があがったりと、プログラミング言語界も相変わらず活況です。お正月先輩からきた年賀状には、「とりあえず今年はScalaから」と書いてありましたが、浮気はせずしばらくPythonがいいかなーと思うところです。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

【2010/01/17 20:53】 | Python | トラックバック(0) | コメント(1) | page top↑
<<CapsLockなんて死んでしまえばいいのに | ホーム | Gmailは添付ファイルの中身も検索している?>>
コメント
if __name__ == "__main__":
a = ( i for i in range(2**4) )
for j in range(2**4):
print ( "%04d" % int(format(next(a), 'b')) )

こんなんでいけそうな
【2010/08/26 11:28】 URL | #-[ 編集] | page top↑
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/45-5ab87dff
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |