Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重复字符计数_Python_String_Python 3.x - Fatal编程技术网

Python 重复字符计数

Python 重复字符计数,python,string,python-3.x,Python,String,Python 3.x,我不明白为什么在尝试以下操作时,字符串中的最后一个字符总是被忽略: def duplicate_count(text): num = 0 count = {} for char in text: print(count.items()) if char in count.keys(): count[char] += 1 else: count [char] = 1 fo

我不明白为什么在尝试以下操作时,字符串中的最后一个字符总是被忽略:

def duplicate_count(text):
    num = 0
    count = {}
    for char in text:
        print(count.items())
        if char in count.keys():
            count[char] += 1
        else:
            count [char] = 1
    for key in count:
        if count[key] == 1:
           num = 0
        else:
           num = count[key] - 1
    return (num)

char_s = 'abcde'
print (duplicate_count(char_s))

您仅在添加给定字符之前输出计数,因此您将永远看不到最终计数。如果您想更改,可以将打印对账单移动到后面


另一个问题是,您的程序只返回字典中最后一个条目的重复计数。您需要创建一个新的字典,或者根据您的要求取num的最大值

最后一个字符不会被省略,在调用printcount.items时,它还没有被添加到count中。

在我看来,这可能需要更多的分段。在我看来,你不应该专注于计算重复的信件;您应该将功能范围缩小到识别哪些字母出现,以及它们出现的次数。这可以很容易地存储在字典变量中

例如:

def string_occurence (string):
    dict={}
    for char in string:
        dict [char]=string.count (char)
    return dict
您还可以通过在检查字符串之前创建一组唯一字符来优化此设置:

def string_occurence (string):
    char_set=set ([char for char in string])
    dict={}
    for char in char_set:
        dict [char]=string.count (char)
    return dict

这取决于您希望控制流如何工作,但我认为第二个函数最适合您。

在您的问题中添加以下信息:1您认为函数的作用是什么。你得到了什么样的输出。3您期望得到什么样的输出以及原因。不要将此作为评论发布。点击问题下方的“编辑”按钮,并将其直接放在那里。它不会被忽略。在添加新字符之前,您的函数会打印count.items,因此字符似乎丢失了,但事实并非如此。在您的字符变量中放置一些实际的副本以供测试是非常值得的。。。