擅长:python、mysql、java
<p>我想这就是你代码中的错误:</p>
<pre><code>alphaset = set() ## 1
...
for i in range(len(partition)):
for j in range(len(partition[i])):
alphaset.add(type(partition[i][j])) ## 2
nodecount += 1
...
count = 0
mapping = dict()
for elem in alphaset: ## 3
mapping[elem] = count ## 4
count+=1
alphasize = count
...
for i in range(len(partition)):
j = len(partition) - i - 1
...
for v in range(len(partition[j])):
node = partition[j][v]
SV = list()
SV.append(mapping[type(node)]) ## 5
</code></pre>
<p>事情是这样的。在1处,您有一个集合,在2处填充了从具有特定“顺序”的列表中获取的某些类型。然后,在3和4处,您对集合进行迭代,并将<code>set</code>中的每个元素映射到某个数字。然后,在5,这个数字被添加到一个列表中。如果我正确理解了您的代码,那么代码的其余部分取决于列表中元素的“顺序”,这取决于映射,映射本身取决于集合中元素的顺序为1。你知道吗</p>
<p>现在,既不能保证<code>set</code>中元素的顺序,也不能保证迭代顺序。因此,在3和4,对于不同的运行,您将得到不同的映射。你知道吗</p>
<p>解决方案是将<code>set</code>显式排序为<code>list</code>,或者使用保留插入顺序的<code>OrderedSet</code>(假设点1之前的代码总是以相同的顺序插入节点)。你知道吗</p>