okkyの日記: 【教えてPythonのエロい人】固定長配列を一気に作るには? 14
日記 by
okky
次の問題(すでにシリーズ化の予感)
今、ファイルを読んで split でキーワードの配列 key を作った。
で、その配列の要素数 len(key) だけ、class Column の配列dを作りたい。
しかし、配列の大きさは判ってるんだから、1つづつ
d.append( Column() )
ってやるのは何となく嫌だ。メモリがフラグメンテーションを起こす予感がする。何より、実際には
d = 配列を作れ( len( key ))
for i in range(len(key)):
d[i] = Column( key[i] )
のようにして、d[i].key に key[i] の値が入るようにしたい。とりあえず要素としては None が入っていてくれればいいんだが…。
…まさか
d = range( len( key ) )
で適当な数字を作って、それを上書きするしかないのか??!
d = generate_list( size, initvalue )
的なインターフェースはないのか?
キーワードの状態によっては Column オブジェクトではなく None を入れたい(配列としてはスキップできない。この後でデータを読むフェーズが待っていて、d[i]がNoneだったら読んだ値をスキップしたい)。
自分も気になった (スコア:1)
M-FalconSky (暑いか寒い)
Re:自分も気になった (スコア:1)
d = [Column(i) for i in key]
でいいかなぁと思ったのですがこれは内部的には思いっきりappendですよね
Re:自分も気になった (スコア:1)
初期化->中身生成をかんがえると、適当な配列からlist()で(メモリとしても連続な)リストを生成して、そっち使うとかがいいのかも...
# 本気で効率重視の場合のレポートがあるといいんだけどねー
M-FalconSky (暑いか寒い)
Re:自分も気になった (スコア:1)
リストの長さが判ってから一気に確保したい場合は、この記述が最も直感的なようですね。
少なくとも for 文で回しながら append() よりは判りやすい。append()だと「どこに」追加しているのだか、直感的に判りにくいのがいけない。もちろん、それがありがたい時もありますが、今回はそうじゃないので。
fjの教祖様
Numeric Python 使えば? (スコア:1)
少なくとも CentOS5 には標準でパッケージがあるので yum で一発インストールだし。
この辺 [nasuinfo.or.jp]が参考になるのでは。
無理です。 (スコア:1)
発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
何となく嫌だ。メモリがフラグメンテーションを起こす予感
とか
d[i]がNoneだったら読んだ値をスキップしたい
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
fjの教祖様
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
小人さんの気持ちが見抜いて得手不得手が判るようになってからです。
メモリ不足…というよりもアドレス不足が乱発するからです。GCがかなりの頻度で動き続けているので。
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
fjの教祖様
32bit world! (スコア:1)
アドレス空間の限界
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
Noneを使っておいて、例外がでたら exception で捕まえて「わかった、じゃ、それは処理しなくていいから、次」ってやるのとどっちが楽かな~
Columnのほうで生じた悪い例外でなくて、「それは処理しなくていい」ことなのを保証するのが面倒すぎ。 それなら、勤勉なコードのほうがましだと思います。
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
Re:発想が手続きに縛られすぎ(Cに毒されている?) (スコア:1)
fjの教祖様