<p>第一个错误是:</p>
<pre><code>Traceback (most recent call last):
File "C:\foo\foo.py", line 17, in <module>
diffCounts[ str(getBin(diff)) ] += 1
TypeError: list indices must be integers
</code></pre>
<p>当需要str时,为什么要将int转换为str?解决这个问题,然后我们得到:</p>
<pre><code>Traceback (most recent call last):
File "C:\foo\foo.py", line 17, in <module>
diffCounts[ getBin(diff) ] += 1
IndexError: list index out of range
</code></pre>
<p>因为你只做了5桶。我不明白你的骗局,但让我们做50桶看看会发生什么:</p>
<pre><code>6
Traceback (most recent call last):
File "C:\foo\foo.py", line 21, in <module>
maxBin = max(maxdiff)
TypeError: 'int' object is not iterable
</code></pre>
<p><code>maxdiff</code>是int列表中的一个值,那么<code>max</code>在这里做什么呢?移除它,现在我们得到:</p>
<pre><code>6
Traceback (most recent call last):
File "C:\foo\foo.py", line 28, in <module>
print binStr + '\t' + '\t'.join(map(str, (diffCounts[i])))
TypeError: argument 2 to map() must support iteration
</code></pre>
<p>果然,您使用了一个值作为<code>map</code>的第二个参数。让我们简化一下最后两行:</p>
<pre><code> binStr = '[' + str(lo) + ',' + str(hi) + ')'
print binStr + '\t' + '\t'.join(map(str, (diffCounts[i])))
</code></pre>
<p>对此:</p>
<pre><code> print "[%f, %f)\t%r" % (lo, hi, diffCounts[i])
</code></pre>
<p>现在它打印:</p>
<pre><code>6
[0.000000, 1.000000) 3
[1.000000, 3.000000) 0
[3.000000, 7.000000) 2
[7.000000, 15.000000) 0
[15.000000, 31.000000) 0
[31.000000, 63.000000) 0
[63.000000, 127.000000) 3
</code></pre>
<p>我不知道在这里还能做什么,因为我真的不明白你想用什么。它似乎包含二元力量,但对我来说没有意义。。。</p>