リスト内包表記スゲー

今さらながら、リスト内包表記のスゴさに触れたので記録しとく。

perlの場合、

@a = (0..9); # 0から9までの数値を要素とした配列
@b = map {$_ * 2} (0..9);
@c = map {$_ * 2} @b;
@d = grep {$_ % 3 == 0 and $_ % 5 == 0} (0..99); # 0〜99までの 3と5の公倍数

# 重複を許さない要素2個の組
@e = ();
for(my $i = 0; $i < @b; $i++){
  for(my $j = $i + 1; $j < @b; $j++){
    push @e,[$c[$i],$c[$j]]
  }
}

pythonの場合

a = range(0, 10) # 0から9までの数値を要素としたリスト
b = map(lambda x: x * 2, xrange(0, 10))
c = [b[x] * 2 for x in xrange(len(b))] # mapをリスト内包表記でも書き直せる
d = [x for x in xrange(0, 99) if (x % 3 == 0 and x % 5 == 0)] # 0〜99までの 3と5の公倍数
e = [[c[x], c[y]] for x in xrange(len(c)) for y in xrange(x+1, len(c))] # 重複を許さない要素2個の組

比較してみるとおもしろい。

[参考]