08/06/28 10:16:39
>>333
>>> mesh_array = [ [(0,0),(0,1),(0,2)], [(1,0),(1,1),(1,2)] ]
>>> mesh_array = [ [(0,0),(0,1)], [(1,0),(1,1)] ]
>>> def f(x,y): return x+y
...
>>> [[f(p[0],p[1]) for p in low] for low in mesh_array]
[[0, 1], [1, 2]]
座標の値はタプルにしたほうが見易いかも
[ [LOW1], [LOW2], ...]で隣り合う点同士の距離は求めれそうだけど
[[C [C
O O
L L
U U
M M
1], 2], ...] 縦方向に走査するのは『転置』しないとめどいような希ガス(間違ってたらスマソ)
358:デフォルトの名無しさん
08/06/28 10:31:26
>>> apply(zip, [(1,2),(3,4)])
[(1, 3), (2, 4)]
>>> apply(zip, [(1,2,3),(4,5,6)])
[(1, 4), (2, 5), (3, 6)]
>>> apply(zip, [(1,2),(3,4),(5,6)])
[(1, 3, 5), (2, 4, 6)]
>>> apply(zip, [(1,3,5),(2,4,6)])
[(1, 2), (3, 4), (5, 6)]
>>> zip([(1,3,5),(2,4,6)])
[((1, 3, 5),), ((2, 4, 6),)]
なんか、最後のapply経由の結果が違うのな…(転置のつくりかた)
359:358
08/06/28 10:45:06
てか当たり前ぽ
py3k だと apply がobsoluteで使えなくなっとる…
360:デフォルトの名無しさん
08/06/28 10:56:18
>>> def apply(func,*args): return func.__call__(*args) # これだと駄目みたい…
...
>>> for e in apply(zip, [(1,2),(3,4)]):
... print(e)
...
((1, 2),)
((3, 4),)
>>> apply(zip, [(1,2),(3,4)])
<zip object at 0x01582648>
py3k で廃止されたapplyを復活させるにはどうしたら
良いですか。
361:デフォルトの名無しさん
08/06/28 11:23:46
>>> zip([(1,3,5),(2,4,6)])
[((1, 3, 5),), ((2, 4, 6),)]
>>>
>>> zip((1,3,5),(2,4,6))
[(1, 2), (3, 4), (5, 6)]
>>>
>>> (1,3,5),(2,4,6) # tuple list
((1, 3, 5), (2, 4, 6))
>>>
>>> zip(*tlist)
zip関数は、タプルのリストを渡さないと思ったとおり動かないのね
>>> apply(zip, [(1,3,5),(2,4,6)])
[(1, 2), (3, 4), (5, 6)]
リストから *tlist を取り出してzipを作用させてると…
362:デフォルトの名無しさん
08/06/28 11:24:42
>>360
>>> my_apply = lambda f, args: f(*args)
...
>>> my_apply(zip, ((1,2),(3,4)))
[(1, 3), (2, 4)]
363:デフォルトの名無しさん
08/06/28 11:27:21
>>> def apply(func, args): return func(*args)
...
>>> for e in apply(zip, [(1,2),(3,4)]):
... print e
...
(1, 3)
(2, 4)
いや、最初から zip(*[(1,2), (3,4)])やろうぜ。
364:デフォルトの名無しさん
08/06/28 11:34:24
>>> for e in zip((1,2),(3,4)):
... print(e)
...
(1, 3)
(2, 4)
>>> for e in zip(tuple([(1,2),(3,4)])):
... print(e)
...
((1, 2),)
((3, 4),)
>>> (1,2),(3,4)
((1, 2), (3, 4))
>>> tuple([(1,2),(3,4)])
((1, 2), (3, 4))
zipにリストでデータ渡せないのはどうしてなんだろう…orz
365:デフォルトの名無しさん
08/06/28 11:43:47
引数として一個のリストのリストを渡されたのと複数個のリストを渡されたのを
同一視されたら困るだろ
一体何を悩んでいるのかさっぱり分からん
366:デフォルトの名無しさん
08/06/28 11:45:06
>>363
㌧くす
>>> for e in zip(tuple([(1,2),(3,4)])): print(e)
...
((1, 2),)
((3, 4),)
>>> for e in zip(*([(1,2),(3,4)])): print(e)
...
(1, 3)
(2, 4)
zip関数というか関数に、『リスト』渡すなら *でキャストして
『引数フォーマット』にしてから渡すよろし、いうことなのね…
引数フォーマットは (1,2),(3,4) != ((1,2),(3,4)) == tuple([(1,2),(3,4)]) と。
367:デフォルトの名無しさん
08/06/28 11:51:00
>>365
>>> (1,2),(3,4)
((1, 2), (3, 4))
>>> tuple([(1,2),(3,4)])
((1, 2), (3, 4))
インタラクティブシェル上の出力が同値だから、
引数フォーマット == (tuple,tuple)の形式かと思ったんよ。
引数フォーマット == tuple,tuple # 括弧なしが正しい引数の形式
入門書嫁乙…orz
368:デフォルトの名無しさん
08/06/28 12:08:10
>>> あ=(0,1);け=(0,2);ま=(0,3);し=(0,4);て=(0,5) # LOW1
>>> お=(1,1);め=(1,2);で=(1,3);と=(1,4);う=(1,5) # LOW2
>>> mesh_array = [(あ,け),(お,め)]
#ラベルを貼った各点を転置して、加工して出力する
>>> for e in zip(*[(あ,け),(お,め)]): print(e)
...
((0, 1), (1, 1))
((0, 2), (1, 2))
>>>
>>> for e in zip(*[(あ,け,ま,し,て),(お,め,で,と,う)]): print(e)
...
((0, 1), (1, 1))
((0, 2), (1, 2))
((0, 3), (1, 3))
((0, 4), (1, 4))
((0, 5), (1, 5))
369:デフォルトの名無しさん
08/06/28 19:46:02
パッケージ名としてハイフンを入れた名前を使うことはできないのでしょうか?
URLリンク(www.python.org)
いままで HogeHoge という名前のパッケージを作っていて,
これを hoge-hoge に変更したいのですが,ダメ?
370:デフォルトの名無しさん
08/06/28 20:00:51
だめ。識別子に使うとマイナスと区別つかないから
371:デフォルトの名無しさん
08/06/28 20:19:30
>>370
なるほど,そうか.
言われてみればそうだよな.
ディレクトリ名がそのまま識別子になるわけだから.
名前空間とかパッケージ周りはどうも C++ から来ると
自由に付けられないのが不便に思えるけど,
その制約が逆にあとから見た時には分かりやすく思えるんだろうな.
372:デフォルトの名無しさん
08/06/28 23:27:19
simplejson 1.9.1 を MingW32 でコンパイルした.
本当のファイル名は simplejson-1.9.1.win32-py2.5.exe だけど
アプロダに上げたらこんなファイル名になっちゃった.
URLリンク(www.rupan.net)
373:デフォルトの名無しさん
08/06/28 23:40:54
2.6 からは simplejson が標準ライブラリに入るのかな?
3.0 からは入るようだけど.
374:デフォルトの名無しさん
08/06/28 23:46:33
2.6から
URLリンク(docs.python.org)
375:デフォルトの名無しさん
08/06/28 23:53:58
>>373
URLリンク(www.python.org)
Library
-------
- The audiodev module has been deprecated for removal in Python 3.0.
- Issue #2750: Add the 'json' package. Based on simplejson 1.9 and
contributed by Bob Ippolito.
- Issue #1734346: Support Unicode file names for zipfiles.
- Issue #2581: distutils: Vista UAC/elevation support for
bdist_wininst.
- Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option,
where an extra space was added after a word containing (but not
ending in) '.', '!' or '?'.
入ってるみたい
376:デフォルトの名無しさん
08/06/28 23:55:44
2.6 からか.手間が省けるな.
W3C では JSON DOM binding も標準化されているようだし,
セキュリティの面でちょっと不安もあるけど jsonp 便利だし,
個人的には RSS つーかフィードも JSON でフィードしてくれって感じだ.
そのうち RDF のトリプルもJSON表現の標準が出るかもなぁ.
377:デフォルトの名無しさん
08/06/29 00:13:28
デバッグ時にヒープのフットプリント(?)を調べようと思って
gc.getobjects() を使ったらできるかなと思ったんだけど,
そもそもオブジェクトのサイズってどうやって求めるんだっけ?
文字とか整数とか実数などの基本型のサイズと参照に必要な
サイズがわかればいいのか?
378:デフォルトの名無しさん
08/06/29 08:00:40
svk によるレポジトリ分割の作業記録
URLリンク(d.hatena.ne.jp)
いままで svndumpfilter, svndumpfilter2, svndumpfilter3, svndumpfilter4
とか使ってうまく行ったり行かなかったりしたが,結局 svk でうまくいった.
本来の使い方とは全然違うところでお役立ち.ありがとう,svk
svk って perl で書かれてるんだね.
379:デフォルトの名無しさん
08/06/30 05:02:57
Tkinter ではプログラムの最後にウィジェットの
mainloop() を呼び出して放置します。
表示されたウィンドウをマウスでクローズすればプログラムは終了しますが、
そうではなくて自発的にウィンドウをクローズしてプログラムを
終了させる方法は無いでしょうか?
別スレッドから何かをすればいいのでしょうか?
380:デフォルトの名無しさん
08/06/30 08:03:05
sys.exit() すれば?
381:デフォルトの名無しさん
08/06/30 11:01:22
おおヴ
たとえば複数のウィンドウ作ってそれぞれmainloopしてるとき
個別にmainloopから抜けるのは無理ですか?
382:デフォルトの名無しさん
08/06/30 15:50:51
イベントコールバックでそのwindow.destroy()かな。
なんか、うちではmainloop呼ばなくてもウィジェットは全て問題なく動いてるように見えるけど。
383:デフォルトの名無しさん
08/06/30 16:11:41
Python ってディープコピーのための仕組みって特に
決められていませんよね?特定のメソッドを実装して
おけば簡単にディープコピーされるとか、そういうの。
クラス毎に hoge.clone() とか作らないとだめ?
384:デフォルトの名無しさん
08/06/30 16:26:19
copy.deepcopy, __deepcopy__
385:デフォルトの名無しさん
08/06/30 17:40:34
>>383
copy.copy()とかcopy.deepcopy()とか試してみ
386:デフォルトの名無しさん
08/06/30 19:05:09
urlからファイル名を取得する方法って楽な方法はありますか?
正規表現使ったり、split使うしか無いんでしょうか?
例えば、↓から
URLリンク(www.python.jp)
next.pngだけを取得したいです。
387:デフォルトの名無しさん
08/06/30 19:16:54
rfind('/')でもすればいいかと。
388:デフォルトの名無しさん
08/06/30 19:23:35
ファイル名の定義が不可能なので厳密には無理。
389:デフォルトの名無しさん
08/06/30 19:26:11
>>387
なるほど。以下のやり方でいい感じに動きました。ありがとうご
ざいます。
url[url.rfind('/')+1:]
>>388
今回のケースでは確実にファイル名で終わるようなURLたちを扱
うのでrfind使った方法でやってみようと思います。ありがとう
ございました。
390:デフォルトの名無しさん
08/06/30 19:30:19
まずurlparse使ってURLを分解したほうが楽だよ!
URLリンク(www.python.jp)
391:デフォルトの名無しさん
08/07/01 00:43:57
threading が本当にスレッド機能を提供しているかどうかをプログラムの中か
ら知るにはどうしたらいいですか?
392:デフォルトの名無しさん
08/07/01 08:41:46
Eclipse の PyDev で補完が効く条件って何?
たとえば *.pyd で提供されているような識別子は
PyDev は知りようが無いから候補にも挙がらない?
393:デフォルトの名無しさん
08/07/01 08:58:21
スレリンク(tech板)
394:デフォルトの名無しさん
08/07/01 09:12:00
>>392
#include <Python.h> //--- Python API ヘッダの指定
// Python.h には既に stdio.h string.h errno.h stdlib.h のインクルード指定が含まれています
// メソッドの実体
static PyObject* exec_do(PyObject* self, PyObject* args)
{
const char* command ; //--- command は PyArg_ParseTuple によって alloc される
int status ;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL ;
status = system(command) ;
return Py_BuildValue("i", status) ;
}
// メソッドテーブル
// メソッド名 / 関数へのポインタ / 呼び出し規則 / 説明書き(何を書いても良い)
// python の help から参照することができます。
static PyMethodDef executerMethods [] = {
{ "do", exec_do, METH_VARARGS, "Execute command for Command-prompt in Windows." },
{ NULL, NULL, 0, NULL }
};
// モジュールの初期化関数 (Python にモジュール名とメソッドテーブルを渡します)
PyMODINIT_FUNC initexecuter(void) // 初期化モジュール名は init + "DLL 名" にする必要があります。
{
Py_InitModule("executer", executerMethods) ; // モジュール名は DLL 名と同じにする必要があります。
}
dll -> pyd(2.5で変更) だからPython C APIで拡張を書いてあげればpython側で認識してくれると思われ
395:391
08/07/01 09:16:52
C:\mercurial-0.9.5>python
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import executer
>>> dir()
['__builtins__', '__doc__', '__name__', 'executer']
>>> from executer import *
>>> dir()
['__builtins__', '__doc__', '__name__', 'do', 'executer']
>>> do('dir')
ドライブ C のボリューム ラベルは MEB_V7370T です
ボリューム シリアル番号は D80C-D8DF です
C:\mercurial-0.9.5 のディレクトリ
2007/12/11 05:38 <DIR> .
2007/12/11 05:38 <DIR> ..
2007/10/20 08:25 312 .hgignore
2007/10/20 08:25 660 .hgsigs
2007/10/20 08:25 782 .hgtags
>>391 の実行結果。import して dir() して読めるなら補完対象になってるはず。
PyDev使ったこと無いから間違ってたらスマソ
396:デフォルトの名無しさん
08/07/01 09:18:44
>>392
× 391
○ 394
>>394 と間違えた…orz
397:392
08/07/01 09:26:03
どうやら「Forced builtin libs」あたりがキモらしい。
>>394
うん、それはそうなんだけど、それって実行時にしか
わからないことなんだよね。そうやって作られた
識別子はソース書いているときに補完に使えない。
398:デフォルトの名無しさん
08/07/01 10:14:22
>>397
URLリンク(pydev.sourceforge.net)
FAQにも書いてあるけど、多分そのForced builtin libsで指定されたライブラリは裏側で
実行していて、そのデータから補完している
sysやosなんかはそうみたい
そして実体としてのモジュールが無い__builtin__とかもそれで情報を取っている感じだ
それ以外のモジュールはソースコードの静的解析なのかな?
399:392
08/07/01 10:46:30
>>398
Pure Python なモジュールというかパッケージな,
ソースコードの静的解析とのことです.
どこで呼んだ情報だったのか忘れちゃったけど.
400:392
08/07/01 10:57:55
というわけで networkx パッケージに含まれる識別子の
PyDev による自動補完ができるようになりました.
こういう芸当ができるのは静的に型付けされてないからなんだろうなぁ.
型情報まで解析しようと思ったらめちゃくちゃ大変そうだし.
401:デフォルトの名無しさん
08/07/01 11:32:58
URLリンク(www.fabioz.com)
>How to check if the information was correctly gotten:
>
>Make sure that you have lots of 'Forced builtin libs' and some 'System libs'.
>
>The Forced builtin libs are the libraries that are built-in the interpreter,
>such as __builtin__, sha, etc. For python, you should have about 50 libs and
>for jython about 30 libs.
>Additionally, you may add other libraries that you want to treat as builtins,
>such as os, wxPython, OpenGL, cStringIO, etc.
>This is very important, because Pydev works on the java side only with static information,
>but some modules don't have much information when analyzed statically, so, Pydev
>creates a shell to get information on those.
>Another important thing is that they must be on your system pythonpath
>(otherwise, the shell will be unable to get that information).
shell だとそういった情報を得ることが出来ないだろう、いう最後のとこが
よくわからんけど、相互補完関係みたいになってるのね…。
wxPythonとか設定登録するの面倒そう、なんて落ちがあったりするのかな?
簡単そげなら乗り換えたいかも > PyDev
402:デフォルトの名無しさん
08/07/01 15:21:21
>>401
ん?
PYTHONPATHに指定してくれないと探せない、って当たり前のことを書いているだけじゃね?
403:デフォルトの名無しさん
08/07/01 15:28:15
>>401
シェル起動して情報得るのに、PYTHONPATHになかったら探せんだろうって
ただそれだけの意味だと思うが。
404:401
08/07/01 17:00:00
This is very important, ~. Another important thing, ~.
みたいに平行して続いててたから、何か重要こと言ってる
んかと思った… ちゅうかもっと英語嫁じぶん…orz
405:デフォルトの名無しさん
08/07/01 19:29:23
英語のできないひとはRubyをやればいいとおもうよ。
406:デフォルトの名無しさん
08/07/01 22:08:00
def iter_walk(elem):
yield elem
for child in elem:
for x in iter_walk(child):
yield x
def flatten(elem, lst):
lst.append(elem)
for child in elem:
flatten(child, lst)
上のように書くよりも下のほうがずっと速いんだけど、
これはもうどうしようもないのかな。
generator使ってツリーのトラバーサルってどうやるんだろ。
407:406
08/07/01 22:25:18
すんません
気のせいでした
python -m profileとかでプロファイルとると、generator使ってると
もの凄く遅いことになるみたいだ
普通に実行したら別に遅くなかったです
408:デフォルトの名無しさん
08/07/01 22:52:32
Pythonは、Rubyよりゆるい感じがいい
409:デフォルトの名無しさん
08/07/02 01:20:46
一個も要素を返さないジェネレータって、
def gen():
raise StopIteration
てやってもだめだよね
def gen():
raise StopIteration
yield
って冗長なyield いれないとだめなのかしらん
410:デフォルトの名無しさん
08/07/02 01:23:57
たんに
gen = iter(())
とかではだめなの?
411:デフォルトの名無しさん
08/07/02 02:08:05
def gen():
if 0: yield
412:デフォルトの名無しさん
08/07/02 02:40:50
Python2#.dll だけを添付してスクリプトを配りたい場合
(いろいろな意味での単純化のため、標準ライブラリをいっさい使わずに組み込みライブラリのみで対処する)
って、ソース読み込むときのエンコーディング関係はどうなるの?
どうもあのへんの処理系統がよくわからないんだけど、ソースの字句解析の時点で
#coding: hogeとあったら
ライブラリの hogeコーデックを見に行くよね??多分。
ライブラリがないと構文木つくれないの? なんかすごく仕組みが不思議なんだ
じゃあライブラリ自身をインポートするときはどーなってるの?
ライブラリ(のコーデック関係部分)は自分を字句解析してほしいけど、字句解析するためにはライブラリが必要???
413:デフォルトの名無しさん
08/07/02 08:46:52
>>412
URLリンク(www.pycs.net)
URLリンク(www.python.org)
URLリンク(bugs.python.org)
解説記事 -> PEP -> Issue tracker ですね。わかります
414:デフォルトの名無しさん
08/07/04 23:42:17
>>> id(1)
10507600
>>> id(2)
10507588
>>> id(3)
10507576
なのに
>>> id(0.1)
11908136
>>> id(0.2)
11908136
>>> id(0.3)
11908136
となる。なんでかワガンネ
415:デフォルトの名無しさん
08/07/05 00:10:53
intの方は他に参照されてて破壊されないで (インデックスとかでよく使いそうだし)
floatの方は破壊されてすぐ同じ場所が再利用されてるんじゃない?
416:415
08/07/05 00:18:50
intobject.cみてみたら-5~256までは予め作っておいているみたい
417:デフォルトの名無しさん
08/07/05 00:52:52
Python2.5.2 (Win)
>>> id(1)
11163352
>>> id(2)
11163340
>>> id(3)
11163328
>>> id(0.1)
14145448
>>> id(0.2)
14145432
>>> id(0.3)
14145464
Python2.5.1 (Linux)
>>> id(1)
135925560
>>> id(2)
135925548
>>> id(3)
135925536
>>> id(0.1)
136126516
>>> id(0.2)
136126516
>>> id(0.3)
136126516
418:デフォルトの名無しさん
08/07/05 05:06:22
tkとwxPythonってどっちがいいですか?
419:デフォルトの名無しさん
08/07/05 06:53:29
環境によって違うのかー。恐ろしいな
420:デフォルトの名無しさん
08/07/05 08:06:32
>>419
何も恐ろしいところなんてないと思うが
421:デフォルトの名無しさん
08/07/05 08:31:07
419の方が恐ろしいだろJK
422:デフォルトの名無しさん
08/07/05 09:03:18
許してやってくれ。
419はゆとり教育の被害者に過ぎない。
423:デフォルトの名無しさん
08/07/05 10:06:31
>>> for i in range(-10, 270): print eval('%d, id(%d)' %(i, i)),
...
(-10, 8702864) (-9, 8702864) (-8, 8702864) (-7, 8702864) (-6, 8702864) (-5, 8402384) (-4, 8402372) (-3, 8402360)
(-2, 8402348) (-1, 8402336) (0, 8402324) (1, 8402312) (2, 8402300) (3, 8402288) (4, 8402276) (5, 8402264) (6, 8402252)
(7, 8402240) (8, 8402228) (9, 8402216) (10, 8402204)
...
(245, 8405408) (246, 8405396) (247, 8405384) (248, 8405372) (249, 8405360) (250, 8405348) (251, 8405336) (252, 8405324)
(253, 8405312) (254, 8405300) (255, 8405288) (256, 8405276) (257, 8702864) (258, 8702864) (259, 8702864) (260, 8702864)
(261, 8702864) (262, 8702864) (263, 8702864) (264, 8702864) (265, 8702864) (266, 8702864) (267, 8702864) (268, 8702864)
(269, 8702864)
>>>
424:デフォルトの名無しさん
08/07/05 10:16:37
d={}; n=[d.update({id(x):x}) for x in range(-10, 270)]; sorted(d.items(), lambda x, y:cmp(x[1], y[1]))
これだと違う結果が出る。理由は知ってるけど書かない。
425:デフォルトの名無しさん
08/07/05 11:07:35
GCに回収させてるやつって何なの?馬鹿なの?死ぬの?
426:デフォルトの名無しさん
08/07/05 11:11:30
>>> int(1.5)
1
>>> float(1.5)
1.5
>>> float('1.5')
1.5
>>> int('1.5')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.5'
>>>
なんでこうなっちゃうんでしょ?
427:デフォルトの名無しさん
08/07/05 11:14:31
>>> int(float('1.5'))
1
428:デフォルトの名無しさん
08/07/05 12:52:58
数値型 <-> 文字列型 <-> 数値型
A <-> JSon <-> B
URLリンク(d.hatena.ne.jp)
ary = [1, 2, 3, 4]
ary.map{|x| x**2}.tap{|a| p a}.select {|x| x>10 } # => [16]
# >> [1, 4, 9, 16]
わたしこけた青アザできた
# >> こけてる過程をストップモーションで出力(修飾表現)
『こけた』の部分を、整理して表示すると
何が起こってるのかわかりやすくなる…
型変換<文字列:数値>をTrace出力付きのForthみたいなかんじで
出力するには、python だとどう描けばよいですか?
429:デフォルトの名無しさん
08/07/05 12:54:27
日本語でおk。
430:デフォルトの名無しさん
08/07/05 13:14:47
日本語? いいえ、Pythonです。
431:デフォルトの名無しさん
08/07/05 13:18:51
>>> L=[1,2,3]
>>> map(str, L) #=>['1', '2', '3']
>>> L=[1,1.2,2,3]
>>> map(str, L) #=>['1', '1.2', '2', '3']
型変換<数値:文字列>は問題なし
>>> strL=['1','2','3']
>>> map(int, strL) #=>[1, 2, 3]
>>> strL=['1','1.2','2','3']
>>> map(int, strL)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.2'
型変換<文字列:数値>でこける
types とかインポートしてやらないと無理なのかな?