【问题标题】:python counting letters in string without count functionpython在没有计数功能的情况下计算字符串中的字母
【发布时间】:2015-05-12 01:18:52
【问题描述】:

我正在尝试编写一个程序来计算字符串中特定字母的出现次数,而无需使用 count 函数。我把字符串变成了一个列表并设置了一个循环来计数,但计数永远不会改变,我不知道为什么。这就是我现在拥有的:

letter = 'a'
myString = 'aardvark'
myList = []

for i in myString:
    myList.append(i)

count = 1

for i in myList:
    if i == letter:
        count == count + 1

    else:
        continue

print (count)

非常感谢任何帮助。

【问题讨论】:

  • count == count + 1 不是分配。只需删除一个=
  • 如果'aardvark'.count('a') 做得更好更快,为什么还要发明糟糕的东西? (至少它不那么容易出错)
  • 您的for 循环具有if...else...,其中else 具有continuecontinue 不是必需的,因为没有什么可以避免使用 for 循环进行计算。一个单独的if 就足够了。
  • 从字符串中创建一个列表也是完全多余的:for char in myString: ... 完成了这项工作,并且非常 Pythonic。

标签: python string counting letter


【解决方案1】:

小心,你使用的是count == count + 1,你必须使用count = count + 1

赋予新值的运算符是=,运算符==用于比较两个值

【讨论】:

  • 谢谢!那只是我的愚蠢。我不敢相信我犯了这个错误。
【解决方案2】:

代替

count == count + 1

你需要

count = count + 1

【讨论】:

    【解决方案3】:

    虽然其他人已经解决了您的问题,但最简单的解决方案是使用 Counter 数据类型:

    >>> from collections import Counter
    >>> letter = 'a'
    >>> myString = 'aardvark'
    >>> counts = Counter(myString)
    >>> print(counts)
    Counter({'a': 3, 'r': 2, 'v': 1, 'k': 1, 'd': 1})
    >>> count = counts[letter]
    >>> print(count)
    3
    

    或者,更简洁(如果您不想检查多个字母):

    >>> from collections import Counter
    >>> letter = 'a'
    >>> myString = 'aardvark'
    >>> count = Counter(myString)[letter]
    >>> print(count)
    3
    

    最简单的实现方法是:

    count = sum(i == letter for i in myString)
    

    或:

    count = sum(1 for i in myString if i == letter)
    

    这是可行的,因为字符串可以像列表一样被迭代,False 被算作 0True 被算作 1 用于算术运算。

    【讨论】:

    • 您将如何存储每个字母的每个计数?例如,如果我们有 aaabbccbb,我们希望它是 a3b42c??
    • 您可以使用items() 在计数器上循环,然后将它们与''.join 结合起来。这是一条线:''.join('{}{}'.format(x, y) for x, y in Counter('aaabbccbb').items())。输出为'a3b4c2'
    • 谢谢!另一个问题,如果没有任何内置函数,你会怎么做?
    • 这听起来像是一道作业题。在现实生活中,如果没有内置函数,你永远不会做这种事情。你应该能够调整我上面基于sum 的方法来做到这一点,但我不会给你作业问题的答案。
    • 我对方法而不是答案更感兴趣,无论如何,谢谢。
    【解决方案4】:

    像这样使用filter函数

    len(filter(lambda x: x==letter, myString))
    

    【讨论】:

      【解决方案5】:

      您的计数永远不会改变,因为您使用的是==,这是平等测试,您应该使用= 重新分配count。 更好的是,您可以使用

      递增
      count += 1
      

      还要注意else: continue 并没有真正做任何事情,因为无论如何您都将继续循环的下一次迭代。如果必须想出一种不使用count 函数的替代方法来计数,我会倾向于正则表达式:

      import re
      stringy = "aardvark"
      print(len(re.findall("a", stringy)))
      

      【讨论】:

        【解决方案6】:

        除了上述方法之外,另一个最简单的方法是使用python字典来解决问题

         word="purple"
         dic={}
         for letter in word:
             if letter in dic:
                dic[letter]+=1
             else:
                dic[letter]=1
         print(dic)
         {'p': 2, 'u': 1, 'r': 1, 'l': 1, 'e': 1}
        

        如果您想计算单词中特定字符的出现次数。我们可以按照下面提到的方式得到它,

                dic['p']
                2  
        

        【讨论】:

          【解决方案7】:

          您的代码逻辑是正确的,除了在使用count == 1 时考虑count == 1,您正在比较count == 1count = 1 是否用于分配,count += 1 用于递增。
          可能你知道这个,你可能会感到困惑 另外,你必须初始化count = 0

          letter = 'a'
          myString  = 'aardvark'
          myList = []
          
          for i in myString:
              myList.append(i)
          count = 0
          for i in myList:
              if i == letter:
                  count +=1
              else:
                  continue
          print(count)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-17
            • 1970-01-01
            • 2014-04-23
            • 1970-01-01
            • 1970-01-01
            • 2012-01-11
            • 2015-12-01
            • 2016-01-01
            相关资源
            最近更新 更多