只是在使用 python3 的演算法教科書中練習一些作業。此函式應該讀取整數串列/陣列并回傳僅包含偶數整數的新串列/陣列。我覺得我的實作是正確的,但它沒有像我預期的那樣回傳串列。
這是我的功能,并對其進行快速測驗。我在回傳陣列時列印出陣列的長度(6),然后在呼叫函式時立即列印長度(無)
def even_array(array1, new_array=[], index=0):
if index >= len(array1):
print(len(new_array))
return new_array
else:
if(array1[index] % 2) == 0: #this is an even number
new_array.append(array1[index])
even_array(array1, new_array, index 1)
int_array = [1,2,3,4,5,5,6,99,102,104,22]
new_array = even_array(int_array)
print(len(new_array))
new_array = even_array(int_array)
for element in new_array:
print(element)
這是我在這里的第一篇文章,所以任何關于格式或我應該包含多少資訊的反饋都非常感謝:)
uj5u.com熱心網友回復:
您的else案例缺少return宣告,因此不會回傳該值。
def even_array(array1, new_array=[], index=0):
if index >= len(array1):
print(len(new_array))
return new_array
else:
if(array1[index] % 2) == 0: #this is an even number
new_array.append(array1[index])
return even_array(array1, new_array, index 1)
旁注:不要將空陣列作為默認引數傳遞,這是一種引入難以除錯的問題的簡單方法。閱讀此答案以獲得更好的清晰度。
uj5u.com熱心網友回復:
您的想法很好,但執行時存在一些問題。
- 您在 else 分支中缺少 return 陳述句;
- 您正在修改串列引數。這將使事情變得難以理解,因為它將保留所有遞回呼叫所做的所有更改。一般要避免這種情況。
一個可能的修復:
def even_array(array1, new_array=[], index=0):
if index >= len(array1):
print(len(new_array))
return new_array
else:
if(array1[index] % 2) == 0: #this is an even number
return even_array(array1, new_array [array1[index]], index 1)
在這種情況下,您也可以這樣做.append,因為在遞回呼叫之后沒有其他任何事情要做。例如,如果有另一個遞回呼叫,您可能需要進行相應的.pop呼叫。但如果可能,請避免像這樣更改串列引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468646.html
上一篇:為什么當我想第二次上傳檔案(第一次完美)時出現Multer錯誤(在expressjs中)?
下一篇:我在查詢中沒有得到正確的結果
