def find_duplicate():
x =input("Enter a word = ")
for char in x :
counts=x.count(char)
while counts > 1:
return print(char,counts)
我在那里遇到小问题我想在字符串中找到所有重复项但是这个程序只给我一个重复的ex:aassdd是我的输入函数只给了我一个:2但它需要在那个形式中: 2 s:2 d:2感谢您的回答。
答案 0 :(得分:1)
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
将被多次打印(在本例中为2),如果在字符串中多次找到它。您可以通过首先在字符串中构造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)
答案 1 :(得分:0)
这会对你有帮助。
def find_duplicate():
x = input("Enter a word = ")
for char in set(x):
counts = x.count(char)
while counts > 1:
print(char, ":", counts, end=' ')
break
find_duplicate()
答案 2 :(得分:0)
def find_duplicate():
x =input("Enter a word = ")
dup_letters = []
dup_num = []
for char in x:
if char not in dup_letters and x.count(char) > 1:
dup_letters.append(char)
dup_num.append(x.count(char))
return zip(dup_letters, dup_num)
dup = find_duplicate()
for i in dup:
print(i)
答案 3 :(得分:0)
仅仅因为这很有趣,一个利用内置函数的解决方案可以避免编写比绝对需要更多的自定义代码:
from collections import Counter, OrderedDict
# To let you count characters while preserving order of first appearance
class OrderedCounter(Counter, OrderedDict): pass
def find_duplicate(word):
return [(ch, cnt) for ch, cnt in OrderedCounter(word).items() if cnt > 1]
它可能更有效率(它不会反复重复每个字符),只报告每个字符一次,并使用参数和返回值而不是input
和print
,因此它更通用(如果main
方法选择,则input
方法可以提示输出print
和OrderedCounter
。
用法很简单(感谢>>> find_duplicate('aaacfdedbfrf')
[('a', 3), ('f', 3), ('d', 2)]
,它也保留了原始字符串中首次出现的顺序):
button.isEnabled = false