[英]Python beginner, strange output problem
以下代碼段出現了奇怪的問題。
from math import sqrt
def Permute(array):
result1 = []
result2 = []
if len(array) <= 1:
return array
for subarray in Permute(array[1:]):
for i in range(len(array)):
temp1 = subarray[:i]+array[0]+subarray[i:]
temp2 = [0]
for num in range(len(array)-1):
temp2[0] += (sqrt(pow((temp1[num+1][1][0]-temp1[num][1][0]),2) + pow((temp1[num+1][1][1]-temp1[num][1][1]),2)))
result1.append(temp1+temp2)
return result1
a = [['A',[50,1]]]
b = [['B',[1,1]]]
c = [['C',[100,1]]]
array = [a,b,c]
result1 = Permute(array)
for i in range(len(result1)):
print (result1[i])
print (len(result1))
它要做的是找到點abc的所有排列,然后將它們連同每個有序點之間的距離之和一起返回。 它做到了; 但是,它似乎還報告了一個奇怪的附加值99。我認為99來自點a和c之間距離的計算,但我不明白為什么它會出現在最終輸出中。
問題是您遞歸調用Permute(array[1:])
,然后使用遞歸結果來計算temp1
。 為什么這是個問題? 您的函數輸出一個數組數組,其中最后一個子數組是temp2
,即距離總和。 因此,遞歸的每個級別都將為最終結果增加越來越多的額外距離。
如果您真的想在同一個函數中計算所有排列和距離,那么建議您返回一個元組(permutation, distance)
。 然后,在分配temp1
,可以使用元組的第一部分,這樣就不會意外添加額外的距離。 如果您不熟悉元組,請參見此頁面 。
我同意Justin Ardini所說的,但我也建議您學習使用pdb之類的Python調試器。 然后,您可以遍歷這樣的函數並弄清楚自己正在發生什么。 這樣您將學到更多。
我想你要做的是:
from math import sqrt
def Permute(array):
result1 = []
result2 = []
if len(array) <= 1:
for subarray in array:
for i in range(len(array)):
temp1 = subarray[:i]+array[0]+subarray[i:]
temp2 = [0]
for num in range(len(array)-1):
temp2[0] += (sqrt(pow((temp1[num+1][1][0]-temp1[num][1][0]),2) + pow((temp1[num+1][1][1]-temp1[num][1][1]),2)))
result1.append(temp1+temp2)
return result1
a = [['A',[50,1]]]
b = [['B',[1,1]]]
c = [['C',[100,1]]]
array = [a,b,c]
result1 = Permute(array)
for i in range(len(result1)):
print (result1[i])
print (len(result1))
我變了:
if len(array) <= 1:
return array
for subarray in Permute(array[1:]):
至:
if len(array) <= 1:
for subarray in array:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.