Python リスト内包表記2 リストの中に複雑な関数を書く

以前、

Python リストの中に関数を書く

って投稿を書きましたが、リスト内包表記の例文として出している

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個あるリストが出力される

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です