1 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:09:55 ] Pythonオフィシャルサイト www.python.org/ 日本Pythonユーザ会 www.python.jp/Zope/ まとめWiki python.rdy.jp/ 関連スレ find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python 前スレ pc11.2ch.net/test/read.cgi/tech/1223543412/
730 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:36:34 ] >>729 そうなのか。公式のドキュメントがいいってのはいいね バージョンは結局自分で触ってみないと善し悪しがわかりそうにないな てきとーにいじってみてから考えるとしますわ
731 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:10:48 ] >>730 jp独自ドキュメントじゃなくて、本家ドキュメント読んでねw 2.5は翻訳完了してるから。
732 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:11:52 ] いま>>731 がしれっとひどいこと言った
733 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:12:12 ] URL挙げとくか。PDFもあります。 www.python.jp/Zope/links/python_documents/
734 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:12:27 ] 胸が小さい
735 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:14:01 ] Pythonでローパケットいじりたい場合 Twistedしかない?
736 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:21:54 ] >>735 raw socketをそのまんま使う
737 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:29:14 ] >>736 そこらへんのことを学ぶたべの書籍ってないでしょうか?
738 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:42:44 ] UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI www.amazon.co.jp/dp/4894712059/ WinSock2プログラミング−Windows Sockets APIによるネットワークプログラミングのすべて www.amazon.co.jp/dp/4797330449/ C言語だけど、この辺知らないでプログラム書くのは無謀。 詳解TCP/IP〈Vol.1〉プロトコル www.amazon.co.jp/dp/4894713209/
739 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 02:41:25 ] Python 2.5.4 released. 2.5.3 短命杉w
740 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:07:03 ] 739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25 Python 2.5.4 released. 2.5.3 短命杉w
741 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:59:11 ] 740 名前:デフォルトの名無しさん[sage] 投稿日:2008/12/24(水) 03:07:03 739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25 Python 2.5.4 released. 2.5.3 短命杉w
742 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 04:42:19 ] クラスへのメンバの追加を制御するために__slots__を使っているんですが、 class foo(object): __slots__ = ['hoge', 'fuga'] def __init__(self): self.hoge = 1 self.fuga = 2 ここに新たに'piyo'というメンバを追加したくなったときに、__slots__と__init__の2箇所を書き直さなければならないのは少し面倒な気もします。 もっと簡単に書けませんかね? そもそもこういうことをpythonに求めてはいけないとか?
743 名前:デフォルトの名無しさん [2008/12/24(水) 06:23:03 ] しかしpythonもデカい言語になったもんだなー。 Library reference読んで再認識したよ。
744 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 10:07:22 ] >>742 >そもそもこういうことをpythonに求めてはいけないとか? メタクラスでも使って自己解決しろ。
745 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:04:00 ] この記事、ひどくね? gihyo.jp/dev/clip/01/orangenews/vol48/0001 >一般的に,並行処理を行うにはスレッドを用いますが,Pythonは >GIL(Global Interpreter Lock)という1プロセスごとにロックを持 >つ機構を採用しているため同時に1つしかスレッドを実行できません。
746 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:17:14 ] Ruby厨のデマだよ。 よい子は惑わされちゃダメだよ。
747 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:19:33 ] 論理的にマルチスレッドで書くという話と SMP で並列処理してパフォーマンスを書くという話の マルチスレッドとを用語上きちんと分けろってこと? 一般用語はどうなってるの?
748 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:29:21 ] 何をひどいと言ってるのかは分からんな PythonにはGILがあるからマルチスレッドでは並列計算が出来なかった (I/Oとかは外出し出来たけど) →multiprocessingならそんな問題が無くてウマー という提灯記事じゃないのか?
749 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:32:51 ] I/Oに限らず、時間のかかる拡張モジュールは全部GIL外で動かすことで Pythonと並列に実行できるけどな。
750 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:34:23 ] まあCのコードを書いて、かつPythonインタプリタやPythonのオブジェクトに 触らないんなら そら何でもありだわな
751 名前:デフォルトの名無しさん [2008/12/24(水) 11:44:51 ] 何でもありが一番だよ。
752 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 15:05:56 ] Alex MartelliのPythonクィックリファレンスってもうそろそろ出るのかな? クックブックは、今から買ってこようと思うんだけど 初めてのPythonとクックブックがあれば、 本家サイトの英語版でお茶を濁せるもんですか? 正規表現関連とメール関連がやりたいです
753 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:06:43 ] Dやろうっと。
754 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:23:31 ] Cook Bookも原書で読んだ方がいいよ。 翻訳本はどれもクソだよ。
755 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:35:10 ] 買ってきたお 3月前に出版されたbashのクックブックも買ってきてしまった Pythonクィックリファレンスもチェックしてきたけど プリントアウトを代行しましたみたいな本だね もっと詳しいことが載っているのかと思っていた くわしく使い方を知りたかったら、ソースを読めって話なのか >>754 英語を楽しんでいる時間は、ないんよ 3.xに完全移行したら、そのときは原書を読もうかな
756 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:55:31 ] クイックリファレンスの次がソースw
757 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:01:20 ] >>755 >プリントアウトを代行しましたみたいな本 おまえそれは翻訳者に失礼だわ。 離婚書けてまで翻訳したらしいぞ(ww
758 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:40:18 ] pythonで計算時間の計測ってどうするの?
759 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:45:17 ] ttp://www.python.jp/doc/2.5/lib/profile.html
760 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 23:52:33 ] >>738 そこら辺は知ってるけど Pythonで簡単にやる方法を探してる
761 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:03:28 ] raw socketで簡単じゃんw
762 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:06:28 ] >そこら辺は知ってるけど 知ってるのなら>>759 より簡単な計測方法って 具体的にどんなものをイメージしているのか教えてくれ。 timeとか?w
763 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:07:28 ] >>761 Cでならできるけど Pythonでのサンプルを見たい
764 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:08:17 ] Cでできるなら Pythonでのサンプルなんていらないだろ
765 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:08:53 ] >>762 多分勘違い 計測方法を聞いてるのは俺じゃない 俺は生パケットのPythonでの扱いを聞いた方
766 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:09:36 ] >>764 スクリプト言語でやることが必須
767 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:09:55 ] >>765 正直心の底からすまんかった
768 名前:デフォルトの名無しさん [2008/12/25(木) 00:13:33 ] python 2.5.4は2.5.2に比べてかなり速くなってる。 BeutifulSoupにxmlをパースさせる処理が約11秒から約9.5秒になった。
769 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:17:41 ] 2.5.3寿命短すぎだろw 落とすだけ落としたけどインスコしないで正解だったわ
770 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:18:14 ] >>765 まずこれ。www.python.jp/doc/nightly/lib/socket-example.html あとは httplib.py とか SocketServer.py とかそのあたりの標準ライブラリの コードを読むのがオヌヌメ。
771 名前:デフォルトの名無しさん [2008/12/25(木) 00:22:45 ] >>758 チュートリアルぐらい読め
772 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:23:50 ] んなTCPとかいう高級なレイヤーの上の話じゃなくて、 raw socketの話をしてんじゃないのか? なんか全然勘違いしてると思うぞ質問者の意図を
773 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:30:04 ] >>772 TCPより下の部分はOSの領分だから、普通は raw socket といえばTCP/UDB/Unix Domain なんだよ。 ていうか、IP層には socket の概念ないし。 raw packet なら IP Packet か Ether Packet かも しんないけどさ。
774 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:37:27 ] >>773 いやフツーraw socketつったらSOCK_RAWのことだと俺は思っていたが…… まあraw socketって言葉遣いが悪かったんならそれは謝る、質問者は >>735 でraw packetと言っていたからね
775 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:53:45 ] >>770 ありがとう ただ、そこのサイトの例はちょっと上位レベルな感じだな TCPヘッダのSEQナンバー、ACKナンバーとか制御フラグとか いじるのが一番の目的なので SocketServer.pyとかはそんな感じなのかな?
776 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:08:10 ] >>775 > SocketServer.pyとかはそんな感じなのかな? いや全然そんなことは無いので安心汁
777 名前:773 mailto:sage [2008/12/25(木) 01:24:36 ] >>774 いや、生パケットとか生ソケットって言葉から、 SOCK_RAW 連想できんかった。すまん。 一般用語としては、「生」っていう用語はあるレイヤに着目したひとつ下のレイヤの事で、 IPの下にはEther当のネットワーク層があるから、生パケットって言われても TCP Packet, UDP Packet, IP Packet, Ether Packet のどれか判らんかった。
778 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:28:34 ] >>777 いや、TCPの上に乗っかるアプリケーションにはTCPを流れるデータは バイトストリームにみえるわけで、 「パケット」は意識しないし、できないでしょ 「パケット」と言われて>>770 の例を出すのは発想として明らかにおかしいと思うよ まあ結論はもう出てるからどうでもいいけどね
779 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 08:45:14 ] ARPは扱えますか?
780 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 09:19:03 ] 何をしたいの? サーバはカーネル組み込みのOSが多いから置き換え不能だけど。
781 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 10:06:12 ] は?
782 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 18:19:11 ] python で ARP のパケットを送受信できますか 何か OS 依存のライブラリとか使わないとできませんか?
783 名前:デフォルトの名無しさん [2008/12/25(木) 18:40:58 ] >>782 できる。 ttp://mail.python.org/pipermail/python-list/2002-November/172963.html ttp://sourceforge.net/projects/pylibnet
784 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 19:45:38 ] >>783 ありがとうございます!!
785 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 03:45:54 ] pythonが関数型言語というわりに あんまり関数ぽくない感じするのは気のせいなのか 副作用つかいまくってる
786 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 03:54:29 ] だれが関数型だなんていったんだ
787 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 04:02:16 ] >>785 > pythonが関数型言語というわりに そんなこと誰が言ってるんだw 関数型言語から色々便利な道具は拝借してるが、単にそれだけだ。 式と文を区別してるし、参照透明性なんぞ最初から眼中にないし、 lambdaは中途半端な糞だし、関数型的なリストは持たないし、 カリー化もパターンマッチも代数データ型もないし、 末尾再帰は最適化しないし、畳み込みは3.0からは格下げだ。 ある意味Guidoの好みは時代に逆行してるな。関数型を嫌ってるんだから。
788 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 06:12:36 ] でも Python は使いやすい
789 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 06:54:27 ] 関数型はネストが深くなりやすいとかメリットを享受するためには無名関数を使わざるを得ないとかの印象がある Guidoの考えとは相性良くないんだろう 書きにくくはないけど読みやすくはない
790 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 14:27:48 ] ctypes で WindowsAPI EnumWindows を呼びたいのですが EnumWindows は引数に callback 関数を指定しないといけないので python 側の関数を callback してもらいたいと思います 具体的な書き方が分からないのでどなたか教えてください
791 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:09:33 ] ttp://www.python.jp/doc/release/lib/ctypes-callback-functions.html from ctypes import * from ctypes.wintypes import * EnumWindows = windll.user32.EnumWindows EnumWindows.argtypes = [c_void_p, c_int] EnumWindows.restypes = c_int EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int) GetWindowText = windll.user32.GetWindowTextA GetWindowText.argtypes = [c_int, c_char_p, c_int] GetWindowText.restypes = c_int def pyEnumWindowsCallback(hwnd, lp): buf = create_string_buffer('\000' * 1024) GetWindowText(hwnd, buf, 1024) if len(buf) > 0: if buf.value != '': print buf.value return True EnumWindows(EnumWindowsCallback(pyEnumWindowsCallback), 0)
792 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:16:26 ] py2exeでdllは作れないの?
793 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:18:51 ] >>787 まー関数型が好きな人は「パターンマッチとカリー化使ってプログラムできる俺かっけえw」 とかニヤニヤしてればいいんじゃね。 高度に関数型の言語は、手続き型と比べてアルゴリズムの記述とかパフォーマンスチューニ ングのノウハウの蓄積と普及がまだまだという印象を受ける。みんながもっと関数型を使う ようになればそういう動きが活発になるんだろうけど。 それと、SmallTalkとかHaskellみたいに一つのプログラミングパラダイムのみをサポートす る言語は、特定の用途にはとても強いが、逆に苦手なプログラミングのタイプにはさっぱり、 ってのが多い気がしないか。 その点、いろんなとこから良いとこ取りしてるPythonは柔軟な対応ができて良いと思うのだけれど。
794 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:19:05 ] >>790 先を越されてしまったようだが…… コールバックとしては、↓のようにクラスのメソッドも普通に使えるよ。 import ctypes BOOL = ctypes.c_int HWND = ctypes.c_ulong LPARAM = ctypes.c_ulong EnumWindowsProc = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM) user32 = ctypes.windll.user32 class Foo(object): def __init__(self): self.windows = [] def MyEnumWindowsProc(self, hwnd, lparam): self.windows.append(hwnd) return 1 def __call__(self): user32.EnumWindows(EnumWindowsProc(self.MyEnumWindowsProc), 0) return self.windows for hwnd in Foo()(): print "%08X" % hwnd
795 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:33:10 ] >>793 Pythonは関数型言語じゃありませんよということを説明しただけだよ Pythonに関数型言語になって欲しいとは一言も言ってない マルチパラダイム言語の中で考えれば、Scalaあたりに比べれば 言語の記述力自体は別に平凡な部類でしょ、Pythonは
796 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:45:25 ] On Python www.shido.info/py/ ython と Ruby は実はほとんど同じで、むきになるほどの差はないと思います。 (ただ、Python は Haskell などの最近の関数型言語の影響が強く見られ、 一方、Ruby は Smalltalk や Eiffel などのオブジェクト指向言語と Lisp の影響が見られます。)
797 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:49:34 ] >>796 ttp://d.hatena.ne.jp/odz/20061119/1163971267 で叩かれてたサイトだな
798 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:54:24 ] >>797 せっかく有用な比較してるのに妙な叩きするなよ zopeとダンジョの比較情報探すのもかなり苦労したんだから
799 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:59:59 ] 有用な比較って…… Pythonでシークエンス型は参照渡しで他は値渡しって記述は俺も ひどいと思ったけど 大嘘じゃん
800 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 16:05:05 ] そもそもPythonレベルで参照渡しなんて概念を持ち出す必要があるのか疑問
801 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:18:57 ] >>800 お前相当アホだろ?
802 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:22:40 ] すみませんが、質問です。 ジェネレータを通常のリストに変換する簡潔な方法は無いでしょうか? ジェネレータが逐次返してくる値を全部まとめたリストを得たいのです。
803 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:40:37 ] >>802 [ e for e in G ]
804 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:40:42 ] list
805 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:54:45 ] >>804 おお、こんなクラスが。ありがとうございました。 > Help on class list in module __builtin__: > > class list(object) > | list() -> new list > | list(sequence) -> new list initialized from sequence's items >>803 リスト内包表記もかなり簡潔ですね。
806 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:56:49 ] >>791 早速ありがとうございます!! でも実行すると最後にエラー出てました EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int) ↓ EnumWindowsCallback = WINFUNCTYPE(c_int, c_int, c_int) でエラー出なくなりました >>794 きれいなコードですね ありがとうございました!!
807 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 18:21:56 ] >>796 駄本の著者だな
808 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 18:54:21 ] 景品表示法的にグレーな本書いた人ね
809 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 19:05:47 ] ttp://www.amazon.co.jp/dp/4777513688 続編は内容的にガッカリらしい
810 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:15:32 ] 恥ぱい
811 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:27:53 ] 中身がハッカーズ大辞典やアンサイクロペディアみたいなノリだったら あのタイトルでも許せたんだけどな。
812 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 05:52:00 ] イテレータから、n 個ずつとってまとめたタプルを 次々返すようなジェネレータって標準モジュール内にないですかね? itertools 内を見回しても見当たらないんですけど・・・ 結構使う機能なので、使うたびにジェネレータ定義するの面倒だし、 この機能だけのためにモジュール定義するのとかも面倒だし、 標準モジュール内であると楽なんですが・・・
813 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 06:03:34 ] あの、回答まだでしょうか?
814 名前:デフォルトの名無しさん [2008/12/27(土) 08:06:33 ] 正月休みです
815 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 10:03:05 ] from 俺のitertools import pair def pair(iterable, count): """ >>> list(pair(range(10), 3)) [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)] """ iterable = iter(iterable) stop = False while not stop: y = () try: for i in range(count): y += (iterable.next(), ) except StopIteration: stop = True if y: yield y
816 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 10:46:00 ] >>812 > この機能だけのためにモジュール定義するのとかも面倒だし、 Pythonのモジュール作るのは別に面倒じゃないと思うんだが…… つーかPythonのスクリプトって特別な呪文を唱えずとも全部モジュールとして 使えるわけだし、せいぜい既存のモジュールとファイル名がかぶらないようにだけ 注意しとけばいい PYTHONPATH, PYTHONSTARTUP, sitecustomize.pyなどの手段で sys.pathに自分用スクリプトディレクトリを加えておくといいぞ Pythonみたいにモジュールが使いやすい言語でコードの再利用を考えないのは損だ
817 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:47:56 ] >>815 >>816 分かりました。 myitertools.py みたいなのを作ってやってみようと思います。
818 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:57:00 ] ちょっと違うけど短くかけるな def pair(iterable, n): return izip(*[iter(iterable)]*n)
819 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:58:45 ] うへ,tuple って immutable っていうから += みたいなのはなしかと思い込んでた…
820 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:25:32 ] a += b って a = a + b として処理されるんでないの
821 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:26:35 ] もちろんそうだよ。
822 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:27:53 ] >>820 __iadd__()がある場合は__iadd__()で処理される 無い場合は、__add()__を用いて処理される immutableの場合は当然__iadd__()なんてものはないから 普通に__add()__を用いて新しいオブジェクトが作られる
823 名前:822 mailto:sage [2008/12/27(土) 12:28:50 ] なんだ__add()__ってw まあ意味分かるよね、ごめん
824 名前:デフォルトの名無しさん [2008/12/27(土) 21:48:30 ] >>> zip(*[iter(range(10))]*3) [(0, 1, 2), (3, 4, 5), (6, 7, 8)] >>> zip(*[iter(range(10))]*4) [(0, 1, 2, 3), (4, 5, 6, 7)]
825 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 22:14:25 ] >>815 >>818 >>824 この場合は末尾の扱いってどうすべきなのかな
826 名前:デフォルトの名無しさん [2008/12/28(日) 00:07:52 ] 用途によって末尾が必要な場合・不要な場合があるけど、 tupleで返す場合の戻り値は >>824 のように固定長にすべきじゃないかな。 また、>>815 は、while ループ一巡辺り最大で tuple += tuple で count - 1個, (iterable.next(), ) で count 個の不要な一時tupleオブジェクトが作成される。 この場合の作業変数はlistを使う方がベター。
827 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 05:15:16 ] 余りが出たら、最後をデフォルト値で埋めてみる def padpairs(iterable, n, default=None): x = chain(iter(iterable), repeat(default, n-1)) return pair(x, n) # pair は >>818 の奴 >>> list(padpairs(range(10),3)) [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)] >>> list(padpairs(range(10),4)) [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, None, None)]
828 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 10:12:17 ] 2.6以上ならizip_longestが使える
829 名前:デフォルトの名無しさん [2008/12/28(日) 10:32:42 ] >>827 GJ
830 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 15:09:27 ] >>828 2.5でもmap使えばいいだろ