最初に、なんだ?これ… と思ったのが
counts = [self.Nsa[(s,a)] if (s,a) in self.Nsa else 0 for a in range(self.game.getActionSize())]
これ。
これ、リスト内包表記というらしいです。
そういえば、勉強会で聞いたことがあるぞっ!
リストの中で関数を実行して、その結果をリストの中に入れてリストを作成できる、夢のような仕組みです。
もうちょっと簡単な例がいいと思うので、下記の例です。
square = [x ** 2 for x in range(10)] print(square) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] を出力
まず、for文の中で0~10までのカウントがされ、それが一つずつ二乗されてリストに収まります。
慣れればこの方が早い場合があるでしょうが、あんまり複雑なのは私は好きではありませんね!!(´ω`)
続きは下記です。