Pythonのfor構文よりC言語のfor文の実行速度は
2倍早い。map関数を使うとfor文よりは大分早くなる。
それに比べてリスト内包表記の実行スピードは
なんとC言語並みとのことです。(初めてのPythonより)
但し、
>>> res = []
>>> for x in range(5):
...   if x % 2 == 0:
...     for y in range(5):
...       if y % 2 == 1:
...         res.append((x, y))
...
>>> res
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
と書いたのに比べて、
>>> [(x,y) for x in range(5) if x%2 == 0 for y in range(5) if y%2 == 1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
ダブルループなど複雑なもののリスト内包表記は可読性が
著しく落ちるのであまりお奨めできない、とある。
しかし、
[(x,y)
  for x in range(5)
    if x%2 == 0
      for y in range(5)
        if y%2 == 1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
[]の中はインデント、改行、自由自在ですから、
返ってfor文よりすっきりしてますよね。
実行速度が早い、分かり易い、かつ短く簡潔である。
リスト内包表記を使わない手は無いと思うが。
どうでしょう?