我的代码中是否有合适的 .count() 方法替代?

时间:2021-06-17 20:33:24

标签: python function

目前我正在编写一个代码,用于在输入的字符串中查找重复项并指示有多少字母有重复项,例如“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' 是同一个字符。我将如何将其替换为函数或更改此处代码的功能?

6 个答案:

答案 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 循环遍历列表。
  • 使用 str.count 计算每个字母的出现次数。
  • 使用 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,
  ]