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-eachループで知っているすべての言語で、ループしているものは一度だけ評価されます。 – user2357112
あるいは、短くてfor-eachをCスタイルの 'for'ループと混同しないでください。私が知っているfor-each-loopを持つすべての言語は、開始時に1回iterableを評価します。例えば、 Javaイテレータは、 '.most_common()'が元のカウンタを参照しない新鮮なリストを返すということです。 – dhke
必要に応じて値を生成する遅延オブジェクトをループしている場合や、コレクションを変更する効果を間違えて再評価することが考えられるかもしれませんが、 'most_common'はカウンタから独立した新しいリストを熱心に作成しますそれはから作成されました。 – user2357112