回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>更新:见下文线条</strong>
除非我遗漏了什么?你知道吗</p>
<pre><code>from array import array
def string_permute(ar, lo, hi, result):
if lo == hi:
# print ar # this gives correct permutated output, howcome result isn't able to store that?
result.append(ar)
else:
for index in xrange(lo, hi+1):
ar[index], ar[lo] = ar[lo], ar[index]
string_permute(ar, lo+1, hi, result)
ar[index], ar[lo] = ar[lo], ar[index]
return result
if __name__ == "__main__":
f = array('c', '1234')
result = []
string_permute(f, 0, len(f)-1, result)
print result
</code></pre>
<p>输出:</p>
<pre><code>[array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234'), array('c', '1234')]
</code></pre>
<p>预期产量:</p>
<pre><code>array('c', '1234') array('c', '1243') array('c', '1324') array('c', '1342') array('c', '1432') array('c', '1423') array('c', '2134') array('c', '2143') array('c', '2314') array('c', '2341') array('c', '2431') array('c', '2413') array('c', '3214') array('c', '3241') array('c', '3124') array('c', '3142') array('c', '3412') array('c', '3421') array('c', '4231') array('c', '4213') array('c', '4321') array('c', '4312') array('c', '4132') array('c', '4123')
</code></pre>
<p>我试着传入<code>result = result or []</code>,然后做一个</p>
<pre><code>result += string_permute(ar, lo+1, hi, result)
return result #at the end of loop
</code></pre>
<p>但这也会适得其反,产出也一样。我不知道为什么。
并不是因为这个<code>array</code>我也只是用一个列表来尝试它。你知道吗</p>
<hr/>
<p>正如在下面的一个答案中提到的,我使用了一个列表。你知道吗</p>
<pre><code>def string_permute(ar, lo, hi, result):
if lo == hi:
result.append(ar[:]) #why does this work and result.append(ar) doesn't?
print ar
else:
for index in xrange(lo, hi+1):
ar[index], ar[lo] = ar[lo], ar[index]
string_permute(ar, lo+1, hi, result)
ar[index], ar[lo] = ar[lo], ar[index]
return result
if __name__ == "__main__":
f = array('c', '1234').tolist() #just made it into a list
result = []
string_permute(f, 0, len(f)-1, result)
print result
</code></pre>
<p><strong>问:</strong>为什么这个方法有效而<code>result.append(ar)</code>无效?你知道吗</p>