我正在尝试编写一个代码,使用python 3.x在单词中查找重复的字符。
例如,
"abcde" -> 0 # no characters repeats more than once
"aabbcde" -> 2 # 'a' and 'b'
"aabBcde" -> 2 # 'a' occurs twice and 'b' twice (bandB)
"indivisibility" -> 1 # 'i' occurs six times
这是我到目前为止的代码,
def duplicate_count(text):
my_list=list(text)
final=[]
for i in my_list:
if i in final:
return(len(final[i]))
else:
return(0)
我希望增加我的python技能,所以我想了解它出了什么问题以及原因。
有什么想法吗?
答案 0 :(得分:1)
我不明白你的代码应该做什么:你永远不会在final
和return
中添加任何内容。
以下解决方案在输入上迭代时保留两个set
。一个是我们见过的每一个角色,另一个是不止一次出现的每个角色。我们使用set
s因为它们具有非常快速的成员资格检查,并且因为当您尝试将项目添加到已包含该项目的set
时,没有任何反应:
def duplicate_count(text):
seen = set()
more_than_one = set()
for letter in text:
if letter in seen:
more_than_one.add(letter)
else:
seen.add(letter)
return len(more_than_one)
答案 1 :(得分:0)
我希望增加我的python技能,所以我想了解它出了什么问题以及原因。
有什么想法吗?
嗯,首先,既然你从未真正把任何东西放在“最后”中,你将永远不会有“i”在“最终”中的情况......
这是一个可以做你想要的功能:
def do_stuff(test_str):
my_list=list(test_str)
my_dict={}
count=0
for i in my_list:
if i in my_dict:
my_dict[i]+=1
else:
my_dict[i]=1
for k in my_dict:
if my_dict[k]>1:
count+=1
return count
这个功能可以改进(由你)。