【Perl, Python】map、grep、sort の比較


Perl で言う、mapgrepsort を Python で表すと次のようになる。

Are Python list comprehensions the same thing as map/grep in Perl? – Stack Overflow
http://stackoverflow.com/questions/1418912/are-python-list-comprehensions-the-same-thing-as-map-grep-in-perl

map

Perl

my @ary1 = 0 .. 4;
my @ary2 = map $_ ** 2, @ary1;
# @ary2 = ( 0, 1, 4, 9, 16 ) となる

Python

ary1 = range( 5 )
ary2 = map( lambda x: x ** 2, ary1 )
# あるいは
ary2 = [ x ** 2 for x in ary1 ]

grep

Perl

my @ary1 = 0 .. 9;
my @ary2 = grep $_ % 2, @ary1;
# @ary2 = ( 1, 3, 5, 7, 9 ) となる

Python

ary1 = range( 10 )
ary2 = filter( lambda x: x % 2, ary1 )
# あるいは
ary2 = [ x for x in ary1 if x % 2 ]

sort

Perl

my @ary1 = qw! lAmbDA3 LAMBDA2 lamBDA4 LAMbda1 !;
my @ary2 = sort { lc $a cmp lc $b } @ary1;
# @ary2 = qw! LAMbda1 LAMBDA2 lAmbDA3 lamBDA4 ! となる

Python

ary1 = "lAmbDA3 LAMBDA2 lamBDA4 LAMbda1".split()
ary2 = sorted( ary1, key = lambda x: x.lower() )

基本的には、Perl におけるブロックをラムダ式に直せばよい。でも、こう書いといて何だが、ラムダ式使うと可読性ががくんと落ちるね。実際のコーディングでは多少冗長でも関数定義を使った方がいい希ガス。

コメントを残す