Rangeの積を求める Python
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()
perm link: /blog/entry/range-python/


