0
counter = Counter()
// fill data into counter
for a, b in counter.most_common():
if (b > 1):
counter[a] = np.log(b)
else:
counter[a] = -np.log((1/(b+0.01)))
Как я вижу, это безопасно, основываясь на моем испытании. Ничего плохого не происходит, когда я меняю коллекцию, пока я перечисляю ее. В других языках в каждом цикле for
оценивается значение counter.most_common()
.Изменение коллекции. Календар во время перечисления?
Не так ли и в Python?
"В других языках, в каждом цикле FOR, значение counter.most_common() вычисляется" - какие языки сделать это? Я ничего не знаю. На каждом языке, который я знаю с циклом for-each, то, что вы зацикливаете, оценивается только один раз. – user2357112
Или, короче: не путайте для каждого с циклами 'for' C-style. Все языки, для которых я знаю, для каждого цикла, оценивают итерацию один раз в начале. Разница, например, Итераторы Java - это '.most_common()' возвращает новый список, который не ссылается на исходный счетчик. – dhke
Возможно, вы думаете о случаях, когда вы зацикливаете на ленивом объекте, который генерирует значения по мере необходимости, или вы можете ошибаться в эффектах мутирования коллекции для переоценки, но 'most_common' с нетерпением создает новый список, не зависящий от счетчика он был создан из. – user2357112