Python

ある金額になるコインの組み合わせ

ref:http://d.hatena.ne.jp/fumokmm/20110813/1313196903 こんなんかな。 coinCombinations :: Int -> [Int] -> [[Int]] coinCombinations total coins | total == 0 = [[]] | null coins = [] | total < first = firstUnusedList | otherwise = firstUsedLi…

文字列を先頭から見て同じところまで除去

ref:http://d.hatena.ne.jp/fumokmm/20110812/1313138407 via:http://www.kt.rim.or.jp/~kbk/zakkicho/11/zakkicho1108b.html#D20110812-4 ふむ。Haskell だとどうなるか。 素直に書くとこうかな。 sameAll :: Eq a => [a] -> Bool sameAll (x:xs) = all (x=…

dict evaluation order

ref:http://www.kt.rim.or.jp/~kbk/zakkicho/11/zakkicho1102b.html#D20110213-2 ref:http://www.kt.rim.or.jp/~kbk/zakkicho/11/zakkicho1102b.html#D20110214-2 ふむ。 % python2.6 --version Python 2.6.1 % cat dict_test.py def f(): a, b = 1, 2 retur…

文字列結合

ref:http://d.hatena.ne.jp/mopemope/20090929/p1 s と t の両者が文字列であるとき、CPythonのような実装では、 s=s+t や s+=tという書式で 代入をするのにin-place optimizationが働きます。このような時、最適化は二 乗の実行時間の低減をもたらします。…

type name

ref:http://d.hatena.ne.jp/mopemope/20090716/p1 あとlistとかdictとかをクラスのコンストラクタではなくファクトリ的な関数に捉えてる人がいそうって話もあったりする。 pythonはnewとか付かないのでそれが関数なのかクラスのコンストラクタなのかパッと見…

join

ref:http://d.hatena.ne.jp/kwatch/20090716/1247717055 知ってて書いているかどうかよくわかりませんが、Python には実際、string.join がありますね。 import string print string.join(['1', '20'], ' ') # 1 20 ところで、separator が optional っての…

それモジュールで

ref:http://d.hatena.ne.jp/kwatch/20090713/1247498972 慣習に従わないことによる弊害というものは理解しにくいものかな。 てか、やるならもう少しうまいやり方があるだろう。typealias.py Str = str List = list Dict = dict Tuple = tuple Set = set Obje…

timeit

ref:http://d.hatena.ne.jp/mzp/20081218/timeit キャッシュってどういうことかよくわからないけど、コードは compile されてから実行される。 あとまぁ、関数を実行時間を計測したくなったら適当に import してやればよい。 import timeit def target(): pa…

new

ref:http://d.hatena.ne.jp/mopemope/20081017/p1 2パターン。 その1。 import new class A(object): pass def test(self): print "test" a = A() a.test = new.instancemethod(test, a, A) print repr(a) # <bound method A.test of <__main__.A object at 0x016D3BD0>> a.test() # test b = A() b.test() # Attribute</bound>…

floordiv

ref:http://d.hatena.ne.jp/mopemope/20081016/p1 まぁ、// で floordiv ってのが狙いな気がするが、別に演算子1つじゃなくてもいいじゃんという。 >>> 3.0//2 1.0 >>> 3.0-+2 1.0 追記 条件満たせばいいだけなら。 >>> 3.0+-2 1.0 >>> 3.0- 2 1.0 >>> 3.0 …

pythonにおける closure と自由変数

ref:http://nyaos.org/d/?p=%282008.08.01%29#p1 ほほう、上位の関数(maker)のローカル変数は、 下位の関数(func)から見るとグローバルに見えるのかと思ったが、 ローカル変数はどこまでいってもローカルなんじゃな。 ちょっと違う。func_code を見るとか di…

やっぱり slice (without zip)

noreはzipがtuple吐いてるのが重いのと、そこからさらに連結作業が入るせいかな。 まぁ、そりゃそうだなとかおもったので、zip を使わないのも合わせて、timeit で Benchmarkとか import re from itertools import izip pat = re.compile('..') def checksum…

slice

via:http://www.kt.rim.or.jp/%7ekbk/zakkicho/08/zakkicho0807b.html#D20080718-9 pythonなら re.findallを使って quartz:pts/3% python -c 'import re,sys; print hex(sum([int(x,16) for x in re.findall("..", sys.argv[1])]))' CAFEBABE 0x340とかすれ…

shadowing

しかし自分で書いた Python のコードを見てみると、そこでは辞書を 入れる変数名として "dic" という名前をけっこう使っていたりする。 dict にすると builtin を上書きしてしまうので。 上書きじゃなくて shadowing な気がする。

pythonで

ref:http://d.hatena.ne.jp/clock9/20080715/1216118971 ipython つかえば一発というオチも。 あと普通に突っ込むと ( ) でってのは無理筋で、せめて $( ) になるのかな、と。 % d $(+ 56 39) $(x 8 9)みたいなの。実装は簡単だなぁ。 #!/usr/bin/env python…

数字を取り出す

とりあえずメモ程度に。あとで書く。 ref:http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0807a.html#D20080707-5 ref:http://d.hatena.ne.jp/s-n-k/20080630/1214836026 数字を抜くだけなら簡単だよね。 SEP = re.compile(r'[^\d]+') def embedded_numb…

print のカンマは空白出力ではない

ref:http://d.hatena.ne.jp/kwatch/20080416/1208383252 print statement の最後にカンマをつけると空白が出力される?それはうそだ。きちんと調べましょう。 % cat test.py import sys print 123, sys.stdout.write("123\n") % python test.py 123123どうせ…

Pythonはダメなところは信者がアレすぎるところ

ref:http://d.hatena.ne.jp/kwatch/20080415/1208274736 まぁ、わからないでもないなぁ。 print 文がよけいな空白と改行を出力してしまう。 わかるなぁ。複数のオブジェクトを空白区切りなしで出力だとこんなのか。 print ''.join(map(str, [a, b, c])) prin…

find

ref:http://d.hatena.ne.jp/PyTest/20080408/1207655137 なんかこう、ひとこと書きたくなるという点で PyTest さんは良いな。 まぁ、Ruby ならもっと簡単。shiro さんのコメントの通りというか PyTest さんも思っているようだが、言語云々よりライブラリの話…

Ruby/Pythonのyield

ひとことでいってしまうと、Rubyのは内部イテレータでPythonのは外部イテレータ。

close

ref:http://d.hatena.ne.jp/kwatch/20080322/1206145969 プログラミングの習慣としてはリソースの使用範囲を明確にする方が良いのではないかなぁ。 てか、with があるよ、と。 from __future__ import with_statement import sys global lineno = 0 def cat_…

Twisted で daytime server

なんとなく from twisted.internet import reactor, protocol from datetime import datetime class DayTimeServer(protocol.Protocol): def connectionMade(self): self.transport.write(datetime.now().isoformat() + "\n") self.transport.loseConnection…

ジェネレータと all/any

ref:関数としてのandとor - 年末年始にJavaScriptでプレゼンツールを作ってみるのをあきらめた Python 2.5 なら all/any がある。あとわざわざジェネレータを返す関数なんて定義しなくてもジェネレータ式使えばいいと思う。 ジェネレータ式と all/any を使え…

Python のエンコーディング

% cat /usr/lib/python2.5/site-packages/sitecustomize.py import sys sys.setdefaultencoding('UTF-8') % cat enc.py import sys print >>sys.stderr, 'sys.stdout.encoding: %s' % sys.stdout.encoding print >>sys.stderr, 'sys.getdefaultencoding(): %…

tail call

ref:記録: [メモ]再帰を使うとn-gramはすっきり書ける うーん、Scheme のコードは末尾再帰になっていないので、普通にスタックを食い尽くす危険性があるように思うのだが、どうなんだろう。Scheme に詳しくないのではずしているかもしれないが。あと、length…

bool が遅い

ref:boolに使い道はあるのか - enbug diary (2007-12-27) む。bool は遅いらしい。 Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> fro…

拡張スライス

ref:拡張スライスってなんだろう? - みずぴー日記 あー、こんなスライスがあるのか。なんか適当なので試してみる。 >>> class Foo(object): ... def __getitem__(self, key): ... return key ... >>> foo = Foo() >>> foo[...] Ellipsis >>> foo[0, ... , 2]…

fibonacci

ref:Fomalhaut of Piscis Australis : フィボナッチ数列 fibonacci = lambda integer: (None if ((type( integer ) != int) or (integer < 0)) else (1 if integer <= 2 else (fibonacci( integer - 1 ) + fibonacci( integer - 2 ))) ) なんか、こういうコ…

はじめての Python

所用で名古屋まで出かけたついでに大きな書店によって適当に技術書をあさったり。 で、タイトルがひどい*1とうわさの紫藤さんの「はじめてのPython」をぱらぱらとめくってみたんだけど、まあ予想通りというかなんというか。あまりにあれだからレジまで運んじ…

compile/disassemble

なんとなくコードの compile と disassemble についてメモ。 Python では compile と dis module を使えば良い。 >>> code = compile("print 1+2", "<string>", "exec") >>> eval(code) 3 >>> import dis >>> dis.dis(code) 1 0 LOAD_CONST 3 (3) 3 PRINT_ITEM 4 PRI</string>…