擅长:python、mysql、java
<p>我不确定这是否会比使用集合更快,但它只需要通过列表一次:</p>
<pre><code>def countWordDistances(li):
wordmap = {}
for i in range(len(li)):
if li[i] in wordmap:
avg, num = wordmap[li[i]]
new_avg = avg*(num/(num+1.0)) + (1.0/(num+1.0))*i
wordmap[li[i]] = new_avg, num+1
else:
wordmap[li[i]] = (i, 1)
return wordmap
</code></pre>
<p>这将返回wordmap的修改版本,与每个键相关联的值是平均位置和出现次数的元组。显然可以很容易地将其转换为原始输出的形式,但这需要一些时间。在</p>
<p>代码基本上在遍历列表时保持一个运行平均值,每次都用加权平均值重新计算。在</p>