在 python 3 中查找字符串中的重复项

新手上路,请多包涵
def find_duplicate():
    x =input("Enter a word = ")
    for char in x :
        counts=x.count(char)
        while counts > 1:
            return print(char,counts)

我在那里遇到了一个小问题,我想在字符串中找到所有重复项,但是这个程序只给了我一个重复项,例如:aassdd 是我的输入函数只给了我一个 : 2 但它必须是那种形式 a : 2 s : 2 d : 2 感谢您的回答。

原文由 Deniz Firat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

return 是一个关键字,它或多或少可以作为 立即退出此功能(并可选择随身携带一些输出) 。因此,您需要删除 return 声明:

 def find_duplicate():
    x =input("Enter a word = ")
    for char in x :
        counts=x.count(char)
        print(char,counts)

此外,您还必须删除 while 循环(或者如果您想要多次更新计数器 print ),否则您将陷入无限循环,因为 count 未更新,因此测试将始终成功。

但是请注意,在这种情况下 a 如果在字符串中多次找到它,将打印多次(在本例中为两次)。您可以通过首先构建字符串中字符的 set 并迭代此集合来解决此问题:

 def find_duplicate():
    x =input("Enter a word = ")
    for char in set(x):
        counts=x.count(char)
        print(char,counts)

最后,最好将 计算 函数和执行 I/O 的函数分开(例如 print )。所以你最好做一个函数来返回一个带有计数的字典,然后打印那个字典。您可以生成一个字典,如:

 def find_duplicate(x):
    result = {}
    for char in set(x):
        result[char]=x.count(char)
    return result

和一个调用函数:

 def do_find_duplicates(x):
    x =input("Enter a word = ")
    for key,val in find_duplicate(x).items():
        print(key,val)

现在最好的部分是:您实际上不需要编写 find_duplicate 函数:有一个实用程序类: Counter

 from collections import Counter

def do_find_duplicates(x):
    x =input("Enter a word = ")
    for key,val in Counter(x).items():
        print(key,val)

原文由 Willem Van Onsem 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个版本应该很快,因为我没有使用任何库或多个循环,你有没有更快的选择?

 import datetime

start_time = datetime.datetime.now()

some_string = 'Laptop' * 99999

ans_dict = {}

for i in some_string:
  if i in ans_dict:
    ans_dict[i] += 1
  else:
    ans_dict[i] = 1

print(ans_dict)

end_time = datetime.datetime.now()
print(end_time - start_time)

原文由 JEX 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题