目前我正在编写一个代码,用于在输入的字符串中查找重复项并指示有多少字母有重复项,例如“aaaaaaabbbcccddddeeeeee”将输出 5。虽然整体代码似乎运行良好,但问题在于.count() 函数的工作原理。
x = 0
def increment():
global x
x = x +1
def duplicate_count(text):
for i in text:
number = text.count(i)
if number == 1:
pass
elif number != 1:
increment()
else:
pass
new_text = text.replace(i, "")
return duplicate_count(new_text)
return x
print(duplicate_count('abcdeaB'))
这里的结果输出返回 1 而不是 2,因为 'b' 和 'B' 不被认为是相同的,这反过来又把结果搞砸为 answers on the codewars website问题存在,希望它认为 'b' 和 'B' 是同一个字符。我将如何将其替换为函数或更改此处代码的功能?
答案 0 :(得分:0)
将您的输入字符串更改为小写,如下所示:
def duplicate_count(text):
text = text.lower()
for i in text:
答案 1 :(得分:0)
您可以使用 set 来计算这样的唯一字母。 Set 只能有 uniue 值。循环设置,如果字母数大于 2,我们将 1 添加到列表中。最后我们对列表进行总结。
def duplicate_count(text: str):
text = text.lower()
return sum([1 for t in set(text) if text.count(t) - 1])
答案 2 :(得分:0)
您可以使用字典 a.lower() 将所有字母变为小写
a="aaAAgaaabBbcccddDdeeeeee"
def duplicate_count(text):
dict1={}
for letter in a.lower():
dict1[letter]=dict1.get(letter,0)+1
dict1 = dict((k, v) for k, v in dict1.items() if v > 1)
return len(dict1)
print(duplicate_count(a))
对于句子中的每个字母,将其添加为字典中的键值其频率 如果键为空,则返回 0 最后,我们用频率(值)>1 为重复项重建字典
答案 3 :(得分:0)
Set
返回唯一值。因此,首先将 text
转换为 set
,这将为我们提供唯一的字母。list
个独特的字母。for loop
循环遍历列表。if-else
语句检查每个字母的出现。如果大于则 1 打印字母及其计数。 def duplicate_count(text):
"" " set returns unique value. So first create a list of all unique value."""
unique_letters = list(set(text))
print(f'\n{text}')
for i in unique_letters:
if text.count(i) > 1 :
count = text.count(i)
print(f"{i} occured {count} times.")
duplicate_count('abcde')
duplicate_count('aabbcde')
duplicate_count('aabBcde')
duplicate_count('indivisibility')
duplicate_count('Indivisibilities')
duplicate_count('aA11')
duplicate_count('ABBA')
#
# abcde
#
# aabbcde
# a occured 2 times.
# b occured 2 times.
#
# aabBcde
# a occured 2 times.
#
# indivisibility
# i occured 6 times.
#
# Indivisibilities
# i occured 6 times.
# s occured 2 times.
#
# aA11
# 1 occured 2 times.
#
# ABBA
# B occured 2 times.
# A occured 2 times.
答案 4 :(得分:0)
使用collections.Counter
进行计数;然后你可以过滤掉唯一的项目以获得你的答案。
>>> from collections import Counter
>>> sum(1 for _, count in Counter("aaaaaaabbbcccddddeeeeee").items if count > 1)
5
答案 5 :(得分:0)
您可以通过将字符串转换为所有小写字符来实现,但您只需在第一次调用函数时执行一次:
providers: [
{
provide: LocationStrategy,
useClass: HashLocationStrategy
},
{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
},
{
provide: MSAL_INSTANCE,
useFactory: MSALInstanceFactory
},
{
provide: MSAL_INTERCEPTOR_CONFIG,
useFactory: MSALInterceptorConfigFactory
},
MsalService,
]