[英]counting the number of elements of a list using recursive function without using len
我看到了這段代碼:
def list_length(my_lis):
if mylist:
return 1 + list_length(my_lis[1:])
return 0
此代碼在不使用 len function 的情況下遞歸計算列表中的元素數。 有人可以解釋一下 list_length(my_lis[1:]) 以及它是如何添加到 1 的,因為據我了解,my_lis[1:] 給出的列表沒有第一個元素。 那么這怎么能給出列表中元素的數量呢?
啊遞歸,往往會使事情變得比他們需要的更復雜,但它仍然很酷!
讓我們添加一些調試代碼來看看發生了什么
def list_length(my_lis):
if my_lis:
print(my_lis)
length = list_length(my_lis[1:])
print(str(my_lis) + " returning 1 + " + str(length))
return 1 + length
print("Empty List! Return 0")
return 0
test_list = ['1', '2', '3', '4']
answer = list_length(test_list)
print("Answer: " + str(answer))
這將 output:
['1', '2', '3', '4']
['2', '3', '4']
['3', '4']
['4']
Empty List! Return 0
['4'] returning 1 + 0
['3', '4'] returning 1 + 1
['2', '3', '4'] returning 1 + 2
['1', '2', '3', '4'] returning 1 + 3
Answer: 4
請注意,我們如何僅在列表為空后才到達基本情況(返回 0)。 還要注意,在我們達到基本情況之后,這個數字才會開始上升。 只有在我們到達一個空列表之后,我們才能開始返回鏈並計算 1 + 最后一個 function 得到的值。
考慮
my_lis = [1,2,3]
如果條件滿足,因為列表不為空,因此返回 1+list_length(my_lis[1:]) 表示 my_lis[1:] 表示 [2,3]。 因此,概括地說,您將列表的長度減少一個,即您計算第一個元素並忽略第一個元素。
return 1+ list_length(my_lis[1:]) #my_lis=[2,3]
return 1+ 1+ list_length(my_lis[1:]) #my_lis=[3]
return 1+ 1+ 1+ list_length(my_lis[1:]) #my_lis=[]
return 1+ 1+ 1+ 0
這如下:
my_lis
不是假的(假設非空列表) 這一直持續到my_lis[1:]
返回 None,在這種情況下,我們將返回 0 而不是返回 1,並且不會觸發另一個遞歸調用。
從最里面開始:
my_lis
為空, return 0
my_lis
不為空, return 1 + 0
my_lis
不為空, return 1 + (1 + 0)
my_lis
不為空, return 1 + (1 + 1 + 0)
這就是您最終獲得列表長度的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.