で紹介されているのですが
配列の隣接する2項にそれぞれ演算を施した配列を得たい。つまり、というお題です。 perl や javascript では
f (+) [1,2,3,4,5] = [3,5,7,9]
のような f が欲しい。
や、python では
というエントリがすでに上がっていますが、 python の場合よく考えたら一番短い入力で止まるイテレータである itertools.imap() を使わなくても入力リストは引数で与えられているわけですから、本質的には
def mapBetween( list, func ): return map( func, list[:-1], list[1:] )
ということになるのではないでしょうか。この辺の処理を非常に強力に記述できるのは python の特徴であるかと思いますが、ここまでくると、ほぼ標準装備といっていいような気がします。
あとは形ばかりのエラー処理(ひどい)なんかを入れて
#! /usr/bin/env python # -*- coding: utf8 -*- import operator def mapBetween( list, func ): try: return map( func, list[:-1], list[1:] ) except: # Todo: Implement error handling return [] def main(): a = [1,2,3,4,5] print a print mapBetween( a, operator.add ) print mapBetween( a, operator.sub ) print mapBetween( a, operator.mul ) print mapBetween( a, operator.div ) print mapBetween( a, lambda x,y: y%x ) if __name__ == '__main__': main()
と書くと良いような気がします。実行結果は
[1, 2, 3, 4, 5] [3, 5, 7, 9] [-1, -1, -1, -1] [2, 6, 12, 20] [0, 0, 0, 0] [0, 1, 1, 1]
となります。
世の中には色々なプログラミング言語がありますが、適材適所で便利なものを選びたいですね。