[Python] Rangeの積を求める

ueBLOGさんのブログ経由で知ったこの Range の積を求めるというもの。

» [Ruby] Rangeの積を求める - masuidrive
» Life is beautiful: 教えながら学ぶRuby:「Rangeの積を求める」をやってみた

を Python で書いてみました。引数に3個以上とかのRangeを渡されても大丈夫です。
元ネタの Ruby は Range クラスを拡張していますが、 Python の Range はビルトイン関数なので関数定義で。

from sets import Set
def range2(*args):
    return reduce(Set.intersection, map(Set, args))

では、実行してみましょう。

>>> range2([1,2,3,4,5,6], [3,4,5,6,7,8,9], [4,5,6,7,8,9,10,11])
[4, 5, 6]
>>> range2([1,2,3,4,5,6], [3,4,5,6,7,8,9], [10,11])
[]
>>> range2(range(1,8), range(3,7), range(4, 200))
[4, 5, 6]

で、何が言いたいかというと、「Reduce なくさないでよ!」ということです。functools.reduce という感じで残るみたいですが、組み込み関数じゃなくなるのは悲しいなぁ。

便利べんり。 Reduce 最高。



Leave a comment


:

:

:

:

このエントリーのはてなブックマーク (-)