如何计算一个字符串中元音字母的总数?

3

嗨,有没有更好的写法来替代这些重复的if语句?我正在尝试寻找更好的编写方式。基本上,我想统计给定字符串s中匹配字母的总数。

s = 'abcdbobbobbegkhl'
count = 0
for letter in s:
    if letter == 'a':
        count += 1
    if letter == 'e':
        count += 1
    if letter == 'i':
        count += 1
    if letter == 'o':
        count += 1
    if letter == 'u':
        count += 1
print('Number of vowels: ' + str(count))
7个回答

9

你也可以使用列表推导式:

s = 'abcdbobbobbegkhl'
count = len([i for i in s if i in 'aeiou'])
print('Number of vowels: ' + str(count))

4
s = 'abcdbobbobbegkhl'
count = 0
for letter in s:
    if letter in 'aeiou':
        count += 1
print('Number of vowels: ' + str(count))

或者一行代码:
count = sum(l in 'aeiou' for l in s)

我能用“==”运算符来实现这个吗? - Tim
@Tim 是的,你可以使用 or 关键字。 - theEpsilon
我猜我很难理解在此示例中for循环内if语句的概念或理解。您能详细解释一下这个算法的整个思路吗?例如,如果我们已经建立了for循环:for letter in s,那么为什么它后面跟着语句:if letter in ['a', 'e', 'i', 'o', 'u']?我们不能在for循环外部建立另一个变量,称其为vowel ='aeiou',然后跟随一个for循环:for letter in s,然后在for循环内部设置vowel == s,然后用计数器count + = 1递增。这个逻辑是对的吗? - Tim
如果我想使用运算符==,我应该如何编写这段代码? - Tim
@Tim 我们遍历字符串s中的每个字母。然后我们测试它是否也在字符串“aeiou”中。换句话说,如果字母等于'a'、'e'、'i'、'o'或'u',那么就是这样吗? - theEpsilon
是的,现在很清楚了。谢谢你为我澄清这些概念,伙计! - Tim

1
s = 'abcdbobbobbegkhl'
count = 0
vowels = ['a','e','i','o','u']

for letter in s:
    if letter in vowels:
        count += 1

print('Number of vowels: ' + str(count))

所以在这个例子中,可以将for循环内的if语句理解为“遍历变量字符串s中的所有字母”,然后在字符串s内查找或匹配字母字符串与变量vowel中的字母字符串吗? - Tim
for循环使用变量“letter”迭代字符串s中的每个字符。if语句检查每个“letter”,以查看它是否包含在列表“vowels”中,并在其为元音字母时递增“count”。这有帮助吗? - Sean Ziegler
试着阅读一下这个:Python 迭代器 - Sean Ziegler

1
可以用多种方式编写。其中一种是这样的:
for letter in s:
    if letter in ['a','e','i','o','u']:
        count = count+1
print('Number of vowels: ' + str(count))

我想我很难理解在这个例子中for循环内部的if语句的概念或理解。你能详细解释一下这个算法的整个思路吗?例如,如果我们已经建立了for循环:for letter in s,那么为什么它后面跟着语句:if letter in ['a','e','i','o','u']?我们不能在for循环外部建立另一个变量,比如vowel = 'aeiou',然后跟着一个for循环:for letter in s,在for循环内部设置vowel == s,然后用计数器count += 1递增。这个逻辑正确吗? - Tim

0
使用字典作为声音集,您可以直接访问声音,而不是在列表中查找。
vocals = {'a':1,'e':1,'i':1,'o':1,'u':1}
s = "aeioutr"
count = 0
for letter in s:
  try:
    count+=vocals[letter]
  except KeyError:
    print(f"{letter} is not a vocal")
print(count) #5

0

这里有另一种解决方案,可能会很好:

s = 'abcdbobbobbegkhl'

vowels = 'aeiou'
count= 0

for vowel in vowels:
    count += s.count(vowel)

print('Number of vowels: ' + str(count))

0

好的,这不完全是被要求的内容,但可能仍然有用,如果OP的目标是计算字母频率。这使用Counter来跟踪字母计数。

from collections import Counter

s = "I am a foobar and I have many vowels"

vowels = "aeiou"

vowels += vowels.upper()

counter = Counter(s)

sum_ = 0
for ch in vowels:
    sum_ += counter[ch]

print(f"Number of vowels:{sum_}")

输出:

Number of vowels:13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接