で紹介されているのですが
配列の隣接する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]
となります。
世の中には色々なプログラミング言語がありますが、適材適所で便利なものを選びたいですね。