Rangeの積を求める Python

  • October 17, 2007 08:15

Life is beautiful: 教えながら学ぶRuby:「Rangeの積を求める」をやってみた をPythonで書くとこんな感じか??もっと簡単に書けそうな気がするけどよく分からなかった。

Rubyはよく知らないけど、話に聞くflattenとかuniqueとかは非常にいいメソッドだと思う。flattenはPythonで書くとき、どうするのか常に忘れてる気がする。

from sets import Set
import operator

def range2(*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]
>>>
    '''
    args_min = max([min(i) for i in args])
    args_max = min([max(i) for i in args])
    return [i for i in Set(reduce(operator.add, args))
            if i >= args_min and i <= args_max]

def _test():
    import doctest
    doctest.testmod()

if __name__ == '__main__':
    _test()