【问题标题】:why is that str.count('') ≠ (from str.count('A') + str.count('B') + ... + str.count('Z'))为什么 str.count('') ≠ (from str.count('A') + str.count('B') + ... + str.count('Z'))
【发布时间】:2012-10-06 04:13:55
【问题描述】:

如果字符串中只有元音(短语),它(应该,对我来说)说True;否则说False。我不明白为什么它总是返回 False,因为 (x >= x) 总是返回 True。 感谢任何人检查此查询的解决方案。

(str) -> 布尔值

def valid_letter_sequence(abc):

    valid_letters = abc.count('A') + abc.count('E') + abc.count('I') + abc.count('O') + abc.count('U')
    counted_letters = abc.count('')
    if valid_letters >= counted_letters:
        return True
    else:
        return False

【问题讨论】:

    标签: python string count equals false-positive


    【解决方案1】:

    观察:

    >>> 'abc'.count('')
    4
    

    将一个空字符串传递给count 会比字符串的长度多一个(因为它会在两端以及每对字符之间找到空字符串)。为什么不直接使用len(abc)

    更一般地说,有更好的方法来做你正在做的事情。可能是这样的:

    def valid_letter_sequence(abc):
        return not (set(abc) - set('AEIOU'))
    

    【讨论】:

    • 当然使用len(abc) 更容易,不幸的是不知道count 的详细信息。您的评论肯定很有用,一旦我获得这样做的声誉,您就会投票给您。我一直在尝试缩短我的代码,您的反馈肯定很有启发性。谢谢。
    【解决方案2】:

    您当然应该使用len() 来查找abc 的长度。 count() 的另一个缺点是它需要再次扫描字符串。 Python 已经知道长度,所以直接询问会更有效。

    all 允许函数在遇到不在“AEIOU”中的字符时立即返回。这被称为short circuit evaluation

    def valid_letter_sequence(abc):
        return all(x in "AEIOU" for x in abc)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 2021-07-30
      • 2020-10-01
      • 2020-08-04
      • 1970-01-01
      • 2019-01-10
      • 2011-12-24
      相关资源
      最近更新 更多