条件を満たす最初の要素を返す(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)