来自复杂字典的奇怪总和

时间:2015-04-06 02:11:43

标签: python dictionary

遇到这个python代码的问题(如果你对变量名很好奇,那就处理来自midi文件的数据)。

song.getIntervals()是各种整数的矩阵,例如:

[[-2,0,0,5,3],[2],[4,3,0]]

除了更长时间。

chrom定义为:

def createIntfunc(a,b):
    temp1={}
    temp2={}
    for x in range(a,b):
        temp1[x]=0
    for x in temp1:
        temp2[x]=dict(temp1)
    return temp2

chrom=createIntfunc(-17,18)

所以它是一个字典,其中键是整数,值是字典,其中包含键和值的整数。

以下是关注的代码:

for phrase in song.getIntervals():
    for noteind in range(1,len(phrase)):
        chrom[phrase[noteind-1]][phrase[noteind]]+=(1/float(sum([len(a) for a in song.getIntervals()])))
print sum([sum(a) for a in [b.values() for b in chrom.values()]])

打印一个接近0.8的值,具体取决于song.getIntervals()是什么。但是我不知道它怎么总是不会返回1.基本上我反复添加一个从零开始的值,这个值被定义为反之多次。我要添加它。所以它应该是0+(1 / x)* x = 1。

我没看到什么?

1 个答案:

答案 0 :(得分:0)

这是你的问题:

“1 / x”的值实际上并没有加“x”次,因为循环内部没有运行“x”次。例如,当短语的长度仅为1时,“1 / x”不会被添加到字典中,因为内部循环仅在满足不等式1< = noteind< 1的索引上运行。 LEN(词组)。当len(短语)== 1时,没有索引可以满足这个不等式,因此循环内部不会执行。我不确定你的意图是做什么的,所以我不确定如何在不知道预期行为的情况下确切地解决它,但这就是为什么它以它的方式运行。