从Python中的字符串中删除辅音
这是我的代码.我不确定我是否需要一个计数器才能工作.答案应该是’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') 解决方法
更正您的代码
如果char == vowels:这行是错误的.它必须是元音中的字母:这是因为您需要检查元音列表中是否存在该特定字符.除此之外,你需要打印(char,end =”)(在python3中)将输出作为iiii打印在一行中. 最终的计划就像 def eliminate_consonants(x): vowels= ['a','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 = "") 看起来很简单,如果’aeiou’中的char,则检查字符串aeiou中是否存在char. ''.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(r'[aeiou]',"mississippi") 将返回字符串中找到的元音列表,即[‘i’,’i’,’i’].所以现在我们可以使用str.join然后使用 ''.join(re.findall(r'[aeiou]',"mississippi")) > 对于这种技术,您需要存储一个匹配每个非元音的地图到一个无类型.为此,您可以使用 str.maketrans({i:None for i in string.ascii_lowercase if i not in "aeiou"}) 这将返回映射.将它存储在一个变量中(这里是m表示地图) "mississippi".translate(m) 这将删除字符串中的所有非aeiou字符. 您可以使用dict.fromkeys和 dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou') 现在使用str.translate. 'mississippi'.translate(m) >使用 正如comments below中J.F.Sebastian所述,您可以使用创建小写辅音的bytearray non_vowels = bytearray(set(range(0x100)) - set(b'aeiou')) 使用这个,我们可以翻译这个词, 'mississippi'.encode('ascii','ignore').translate(None,non_vowels) 这将返回b’iiii’.这可以通过使用解码即b’iiii’.decode(“ascii”)容易地转换为str. bytes返回一个bytes对象,是bytearray的不可变版本. (具体是Python 3) non_vowels = bytes(set(range(0x100)) - set(b'aeiou')) 使用这个,non_vowels) 这将返回b’iiii’.这可以通过使用解码即b’iiii’.decode(“ascii”)容易地转换为str. 时间比较 Python 3 python3 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii',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',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 正如您所看到的,使用字节的最终方法是最快的. Python 3.5 python3.5 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.encode('ascii',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',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-3.x – 期望的Integral Type:Python 3.5类型提示和
- python – 在hyperopt中设置条件搜索空间的问题
- python-2.7 – 使用jaccard相似性聚类分类数据
- 【Python Werkzeug】 -- 2019-08-07 10:53:44
- python基于BeautifulSoup实现抓取网页指定内容的方法
- 在Python中发送数据Curl / Json
- python – 查找时间序列数据的总持续时间,不重叠
- python – 使用Pyx绘制大括号
- python正则表达式match和search用法实例
- Appium+Python移动端(Android)自动化测试环境搭建(经典详