这是我的代码。我不确定我是否需要一个计数器才能工作。答案应该是'iiii'
。
def eliminate_consonants(x):
vowels= ['a','e','i','o','u']
vowels_found = 0
for char in x:
if char == vowels:
print(char)
eliminate_consonants('mississippi')
最佳答案
更正您的代码
行 if char == vowels:
是错误的。它必须是 if char in vowels:
。这是因为您需要检查元音列表中是否存在该特定字符。除此之外,您需要 print(char,end = '')
(在 python3 中)将输出打印为 iiii
全部在一行中。
最终的程序会是这样的
def eliminate_consonants(x):
vowels= ['a','e','i','o','u']
for char in x:
if char in vowels:
print(char,end = "")
eliminate_consonants('mississippi')
输出将是
iiii
其他方式包括
在
字符串中使用
def eliminate_consonants(x): for char in x: if char in 'aeiou': print(char,end = "")
语句
if char in 'aeiou'
看起来很简单,它检查char
是否出现在字符串aeiou
中。-
''.join([c for c in x if c in 'aeiou'])
此列表理解将返回一个列表,该列表仅当字符位于
aeiou
中时才包含该字符
-
''.join(c for c in x if c in 'aeiou')
这个 gen exp 将返回一个生成器,而不是仅当字符在
aeiou
中时才返回字符
-
您可以使用
re.findall
只发现字符串中的元音。代码re.findall(r'[aeiou]',"mississippi")
将返回在字符串中找到的元音列表,即
['i', 'i', 'i', 'i']
。所以现在我们可以使用str.join
然后使用''.join(re.findall(r'[aeiou]',"mississippi"))
-
对于此技术,您将需要存储一个映射,该映射将每个非元音字母匹配到
None
类型。为此,您可以使用string.ascii_lowecase
.制作 map 的代码是str.maketrans({i:None for i in string.ascii_lowercase if i not in "aeiou"})
这将返回映射。请将其存储在一个变量中(此处为 map 的
m
)"mississippi".translate(m)
这将从字符串中删除所有非
aeiou
字符。 -
您可以将
dict.fromkeys
与sys.maxunicode
一起使用.但是记得先import sys
!dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')
现在使用
str.translate
。'mississippi'.translate(m)
使用
bytearray
如 J.F.Sebastian 所述在comments below ,您可以使用
创建小写辅音的字节数组non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))
使用这个我们可以翻译这个词,
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
这将返回
b'iiii'
。这可以通过使用decode
轻松转换为str
,即b'iiii'.decode("ascii")
。使用
bytes
bytes
返回一个字节对象,是bytearray
的不可变版本。 (它是特定于 Python 3 的)non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))
使用这个我们可以翻译这个词,
'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
这将返回
b'iiii'
。这可以通过使用decode
轻松转换为str
,即b'iiii'.decode("ascii")
。
时序比较
python 3
python3 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii', 'ignore').translate(None, non_vowels).decode('ascii')"
100000 loops, best of 3: 2.88 usec per loop
python3 -m timeit -s "text = 'mississippi'*100; non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii', 'ignore').translate(None, non_vowels).decode('ascii')"
100000 loops, best of 3: 3.06 usec per loop
python3 -m timeit -s "text = 'mississippi'*100;d=dict.fromkeys(i for i in range(127) if chr(i) not in 'aeiou')" "text.translate(d)"
10000 loops, best of 3: 71.3 usec per loop
python3 -m timeit -s "import string; import sys; text='mississippi'*100; m = dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')" "text.translate(m)"
10000 loops, best of 3: 71.6 usec per loop
python3 -m timeit -s "text = 'mississippi'*100" "''.join(c for c in text if c in 'aeiou')"
10000 loops, best of 3: 60.1 usec per loop
python3 -m timeit -s "text = 'mississippi'*100" "''.join([c for c in text if c in 'aeiou'])"
10000 loops, best of 3: 53.2 usec per loop
python3 -m timeit -s "import re;text = 'mississippi'*100; p=re.compile(r'[aeiou]')" "''.join(p.findall(text))"
10000 loops, best of 3: 57 usec per loop
时间排序
translate (bytes) | 2.88
translate (bytearray)| 3.06
List Comprehension | 53.2
Regular expressions | 57.0
Generator exp | 60.1
dict.fromkeys | 71.3
translate (unicode) | 71.6
如您所见,使用 bytes
的 final方法是最快的。
python 3.5
python3.5 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii', 'ignore').translate(None, non_vowels).decode('ascii')"
100000 loops, best of 3: 4.17 usec per loop
python3.5 -m timeit -s "text = 'mississippi'*100; non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii', 'ignore').translate(None, non_vowels).decode('ascii')"
100000 loops, best of 3: 4.21 usec per loop
python3.5 -m timeit -s "text = 'mississippi'*100;d=dict.fromkeys(i for i in range(127) if chr(i) not in 'aeiou')" "text.translate(d)"
100000 loops, best of 3: 2.39 usec per loop
python3.5 -m timeit -s "import string; import sys; text='mississippi'*100; m = dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')" "text.translate(m)"
100000 loops, best of 3: 2.33 usec per loop
python3.5 -m timeit -s "text = 'mississippi'*100" "''.join(c for c in text if c in 'aeiou')"
10000 loops, best of 3: 97.1 usec per loop
python3.5 -m timeit -s "text = 'mississippi'*100" "''.join([c for c in text if c in 'aeiou'])"
10000 loops, best of 3: 86.6 usec per loop
python3.5 -m timeit -s "import re;text = 'mississippi'*100; p=re.compile(r'[aeiou]')" "''.join(p.findall(text))"
10000 loops, best of 3: 74.3 usec per loop
时间排序
translate (unicode) | 2.33
dict.fromkeys | 2.39
translate (bytes) | 4.17
translate (bytearray)| 4.21
List Comprehension | 86.6
Regular expressions | 74.3
Generator exp | 97.1
关于python - 从 Python 中的字符串中删除辅音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998052/