簡體   English   中英

Python初學者,奇怪的輸出問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM