Видел вот такой код:
s = ['a','b','c','d','a','a','a','b','c','b','b','b']
X = {}
for i in range(len(s)-1):
X.setdefault((s[i], s[i+1]), [0])[0] += 1
Т.е. идем по списку и считаем переходы, a->b, b->c, c->c и так далее. Какя понимаю, setdefault() добавит значение по умолчанию, если ключ отсутствует в словаре. Но я не понимаю, почему default value список, в данном случае из одного элемента [0].
В чем необходимость использовать список в качестве счетчика, почему нельзя напрямую использовать целое для хранения? Например, вот такое тоже работает:
for i in range(len(states)-1):
M.setdefault((states[i], states[i+1]), 0)
M[(states[i], states[i+1])] += 1
Спасибо.