こしごぇ(B)

旧:http://d.hatena.ne.jp/koshigoeb/

条件を満たす最初の要素を返す(Python)

Ruby の Array#find を Python でどうやるのか悩んだ。

(0..4).find{|n| n > 3}

イテレータを作って next で次(最初)の要素を取って止めたら良いと言うことが分かった。

next(x for x in xrange(1,5) if x > 3)
next(x for x in xrange(1,5) if x > 4)

該当するものが無かった場合に StopIteration 例外を発生させないためには、ifilter を使うと良いらしい。

from itertools import  ifilter
next(ifilter(lambda x: x > 3, xrange(1,5)), None)

こういう細かいところで躓きまくるから、新しい知識が増えるのは良いんだけど、実装作業が若干ストレスフル。

追記

Ruby の Hash#key を Python で実現するにはどうしたらよいのか。

{a: 1, b: 2, c: 1}.key(1)

また next を使う?

next(k for k,v in {'a': 1, 'b': 2, 'c': 1}.items() if v == 1)