多条件python
我想做一个计算字符串中辅音的函数,所以我尝试这样做:多条件python,python,if-statement,Python,If Statement,我想做一个计算字符串中辅音的函数,所以我尝试这样做: def vowel_count(foo): count = 0 for i in foo: if not i == 'a' and i == 'e' and i ... and i == 'O' and i == 'U': count += 1 return count 但这是相当丑陋和乏味的事情,更多的情况下更是如此。有没有办法把它们放在一起?您正在寻找not in操作符 def vowel_count(foo
def vowel_count(foo):
count = 0
for i in foo:
if not i == 'a' and i == 'e' and i ... and i == 'O' and i == 'U':
count += 1
return count
但这是相当丑陋和乏味的事情,更多的情况下更是如此。有没有办法把它们放在一起?您正在寻找
not in
操作符
def vowel_count(foo):
count = 0
for i in foo.lower():
if i not in 'aeiou':
count += 1
return count
或者更简单地说:
def vowel_count(foo):
return sum(i not in 'aeiou' for i in foo.lower()) # True == 1, False == 0
使用容器以较低的形式存储元音:
def vowel_count(foo):
vowel = ["a", "e", "i", "o", "u", "y"]
count = 0
for i in foo:
if i.lower() not in vowel:
count += 1
然后你也可以用一个过滤器来做一些不同的事情
def condition(letter):
vowel = ["a", "e", "i", "o", "u", "y"]
if letter.lower() not in vowel and letter != " ":
return True
else:
return False
foo = 'bnojouearoui okeorjaji '
count = len(list(filter(condition, foo)))
“aeiou”中的
i.lower()
?还要注意,您的原始代码并不是您想要的<代码>非a和b以及c被理解为(非a)以及b和c
,这与非(a和b以及c)
有很大不同。一个字符很难同时成为“e”和“O”以及“U”,即使它不是“a”。sum(c代表k,c在collections.Counter(i.lower())如果k在'aeiou')
是否最好先构建一次集合?我还认为使用。。。如果我不在
中,通常比协调我不在…
从bool到int的速度要快?无需执行设置(…)
——速度要慢得多。它在每次迭代中从字符串创建一个集合。您可以使用set
操作来代替。@warvariuc我在错误的假设下工作,即优化器将在编译时创建集合。另外,尽管从技术上讲,中的是对字符串的O(n)操作,但它是如此短的字符串,以至于字符串仍然比集合稍快。或者,简言之,注意过早优化;)@warvariuc:您可以在循环之前甚至在函数外部创建一组计数(或折扣)字符。我不明白为什么每次迭代都需要构造它。。。问题在于中的是否对set
或str
更有效(我怀疑set
,但在不进行分析的情况下不会明确说明),但您肯定可以在不影响性能的情况下构建一个集合。