Pythonをはじめてみる(8)

ついでだから、Pythonでも書いてみよう。


import random

nRep = 100000
nDays = 365
nAcc = 7

def calcMinInterval():
a = [ random.randint(0, nDays - 1) for i in range(nAcc) ]
a.sort()
min = nDays + a[0] - a[nAcc-1]
for i in range(1, nAcc):
interval = a[i] - a[i-1]
if interval < min:
min = interval

return min

minInterval = [ 0 for i in range(nDays / nAcc + 1) ]
for i in xrange(nRep):
minInterval[calcMinInterval()] += 1

for i in range(nDays / nAcc + 1):
print "%d,%d" % (i, minInterval[i])

Perlよりちと遅かった。

内包表現

例えば、


[ 0, 0, 0, 0, 0 ]

というリストを作りたいとき、こう書ける。


l = [ 0 for i in range(5) ]

range(5)は、[ 0, 1, 2, 3, 4 ]を返す。


[ i * i for i in range(5) ]

は、


[ 0, 1, 4, 9, 16 ]

を返す。

xrange

rangeはリストを返すが、for文でたくさん回したいときは、xrangeを使うとよいらしい。これはリストではないんだとか。


for i in xrange(nRep):
minInterval[calcMinInterval()] += 1