以前、
って投稿を書きましたが、リスト内包表記の例文として出している
counts = [self.Nsa[(s, a)] if (s, a) in self.Nsa else 0 for a in range(self.game.getActionSize())]
について、掘り下げていなかったので、掘り下げますね!
分解すると、リスト内包表記は
[リストの中身になるもの for i in リストの中の要素の数]
です。
なので、一見複雑なこの式は
self.Nsa[(s, a)] if (s, a) in self.Nsa else 0
の三項演算子でのif文判定と
for a in range(self.game.getActionSize())
の要素の数の部分に分けられます。
なんというか、三項演算子の存在を忘れていたので、前半の書き方について、しばらくわかりませんでした(;^ω^)
この例題だとこの例題で完結しないので、簡単な例です。
s = 1 list = [1,2,3,4] list2 = list if s in list else 0 print(list2) #[1, 2, 3, 4]が出力される counts = [ list if s in list else 0 for a in range(10)] print(counts) #[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], ...] [1,2,3,4]が10個あるリストが出力される