0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】table[key][0] += 1 でやっていることがわからない

Posted at

table[key][0] += 1 でやっていることがわからない。

Kaggleで他の人のノートブックをみている際に以下のような記述を見つけた。

import random
import string
import collections

action_seq = [2,1]
action_seq, table = [], collections.defaultdict(lambda: [0, 0, 0]) 
key = ''.join([str(a) for a in action_seq[:-1]])
table[key][0] += 1 
print(table[key][0])

上記の実行結果は以下のようになる。

1

正直何がどうなって「1」という結果になるのかさっぱりわからなかった。
collections.defaultdict()の処理内容や、lambdaについても確認したがそれでもよくわからない。
そもそも配列に対して「+= 1」を行う行為がどのような結果になるのか想像がつかなかった。

どのようにして理解をしたか

以下のようなデバックを行うことで動き方を理解することができた。

import random
import string
import collections

action_seq, table = [], collections.defaultdict(lambda: [0, 0, 0]) 
action_seq = [2,1]
key = ''.join([str(a) for a in action_seq[:-1]])
print(table)
table[key][0] += 1 
print(table)
table[key][1] += 1 
print(table)
table[key][2] += 1 
print(table) 

結果は以下のようになる。

defaultdict(<function <lambda> at 0x7fd38dfa43b0>, {})
defaultdict(<function <lambda> at 0x7fd38dfa43b0>, {'2': [1, 0, 0]})
defaultdict(<function <lambda> at 0x7fd38dfa43b0>, {'2': [1, 1, 0]})
defaultdict(<function <lambda> at 0x7fd38dfa43b0>, {'2': [1, 1, 1]})

この結果からわかることは、「table[key][0] += 1」では以下のような構成で処理される。

table[key]...テーブルのキーを「2」に設定
[0]...デフォルトで設定した[0,0,0]の1番目の列を指定
+= 1...テーブルキー2の配列の1番目の列の値に1を加算

あくまで[key]の後に指定している[0]は列指定であることがわかりました。
※二次元配列なのか?とか余計なことを考えていたので混乱しました。。

結構この処理内容を理解するのに時間が掛かったので参考になれば嬉しいです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?