繁体   English   中英

递归Python函数对列表中元素的出现进行计数

[英]Recursive Python function to count occurrences of an element in a list

如何执行一个递归函数,该函数告诉我列表中元素存在的时间。 例如,假设我有以下列表['a','b','c','b','b','d']。 我如何做一个带有2个参数的递归函数。 一个是列表,另一个是元素。 该函数必须返回元素出现在列表中的次数。

我尝试了以下操作,但是每次返回该功能时,位置都会重新启动:

def number_of_repetitions(liste, element):


    position = 0
    number_of_rep = 0


    if position == len(liste)-1:
        return number_of_rep

    if liste[position] == element:
        position +=1
        return number_of_rep + number_of_repetitions(liste[position], element)
    else:
        position +=1
        return number_of_rep + number_of_repetitions(liste[position], element)

print(number_of_repetitions(['a','b','c','b'],'b'))
def recursiveCount(lst,key):
    if lst == []: #base case
        return 0
    if lst[0] == key:
        return 1 + recursiveCount(lst[1:],key)
    else:
        return 0 + recursiveCount(lst[1:],key)

print recursiveCount(['a','b','a'],'a') #prints 2

基本情况:空列表,列表中没有键

第一种情况:第一个元素与键匹配,对其进行计数(1),然后对除firstst元素以外的所有元素进行递归调用

第二种情况:第一个元素不匹配,不计算它(0),除第一个元素外对所有元素进行递归调用

def element_count(input_list, ele, count=0):
    if ele in input_list:
        count = count + 1
        input_list.remove(ele)
        return element_count(input_list, ele, count)
    else:
        return count


input_list = ['a','b','c','b','b','d']  

print  "Count of 'b' in input list is :", element_count(input_list, 'b')    
print  "Count of 'a' in input list is :", element_count(input_list, 'a')    

给出计数result为:

Count of 'b' in input list is : 3
Count of 'a' in input list is : 1

您不需要为此进行递归。

print ['a','b','c','b','b','d'].count('b') #prints 3

利用True == 1False == 0的事实:

def count(x, t):
    if not x:
        return 0
    else:
        return (x[0] == t) + count(x[1:], t)

尽管老实说,我可能更喜欢选择的答案,因为它更为明确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM