5

何らかの理由で、evalRow(list(array([0, 1, 0, 0, 0])))異なるevalRow([0, 1, 0, 0, 0])結果が得られます。ただし、numpy 配列からリストに移動するmagicConvert代わりに (ここでこれをデバッグする)を使用すると、期待どおりに動作します。list

def magicConvert(a):
  ss = str(list(a))[1:-1]
  return map(int, ss.split(","))

# You don't actually need to read these functions, just here to reproduce the error:
from itertools import *
def evalRow(r):
  grouped = map(
    lambda (v, l): (v, len(tuple(l))),
    groupby(chain([2], r, [2])))
  result = 0
  for player in (1, -1):
    for (pre, mid, post) in allTuples(grouped, 3):
      if mid[0] == player:
        result += player * streakScore(mid[1], (pre[0] == 0) + (post[0] == 0))
  return result

def streakScore(size, blanks):
  return 0 if blanks == 0 else (
    100 ** (size - 1) * (1 if blanks == 1 else 10))

def allTuples(l, size):
  return map(lambda i: l[i : i + size], xrange(len(l) - size + 1))
4

2 に答える 2

3

テストしたところ、異なる結果が得られました。理由は聞かないでください、多分バグですか?

とにかく、常にtolist()関数を使用して、numpy 配列をリストに変換します。

evalRow(array([0, 1, 0, 0, 0]).tolist()) == evalRow([0, 1, 0, 0, 0])
#output: True
于 2013-11-05T14:31:40.997 に答える