'一个字符串: -
a = 'abcderui'
我想计算字符串a
减去元音的长度。实现它的最快方法是什么?
目前我正在做: -
a = list(a)
for i in a:
if i in vowels:
continue
count +=1
答案 0 :(得分:6)
如果字符串不大,那么str.translate
是最佳选择:
>>> a = 'abcderui'
>>> len(a.translate(None, 'aeiou'))
4
<强>时序:强>
>>> a = 'abcderui'*100
>>> %timeit len(a.translate(None, 'aeiou'))
1000000 loops, best of 3: 1.86 µs per loop
>>> %timeit sum(1 for c in a if c not in 'aeiou')
10000 loops, best of 3: 53.2 µs per loop
>>> %timeit len(nonvowels.findall(a))
10000 loops, best of 3: 65.3 µs per loop
>>> %timeit len(vowels.sub('', a))
10000 loops, best of 3: 72 µs per loop
答案 1 :(得分:3)
正则表达式解决方案:
import re
nonvowels = re.compile('[^aeiou]', re.IGNORECASE)
result = len(nonvowels.findall(s))
或
vowels = re.compile('[aeiou]', re.IGNORECASE)
result = len(vowels.sub('', s))
答案 2 :(得分:2)
sum(1 for c in some_string if c not in 'aeiou')
如果您想要不带元音的字符串,只需使用列表推导而不是sum
和c
而不是1
。
但请注意,不同的语言有不同的元音!