Python リスト内包表記をもう少し考える



内包表記についてもう少し。

内包表記で九九のリストを作ってみます。

l = [x*y for x in xrange(1,10) for y in xrange(1,10)]

for i in xrange(9):
  print l[i*9:(i*9)+9]



lambdaと組み合わせることも、もちろん可能

func = lambda x,y:x*y
l = [func(x,y) for x in xrange(1,10) for y in xrange(1,10)]
for i in xrange(9):
  print l[i*9:(i*9)+9]



リスト内に書くforの数に制限はない模様

l = [x+y+z for x in range(5) for y in range(5) for z in range(5)]
print l



どういう順番に呼び出されるかというと
def func(x,y,z):
  print x,y,z

[func(x,y,z) for x in range(5) for y in range(5) for z in range(5)]

#0 0 0
#0 0 1
#0 0 2
#0 0 3
#0 0 4
#0 1 0
#0 1 1
#0 1 2
#0 1 3
#0 1 4
#0 2 0
#...


こう書くのと同じですね。
for x in range(5):
  for y in range(5):
    for z in range(5):
      func(x,y,z)



もどる