加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

从Python中的字符串中删除辅音

发布时间:2020-12-20 13:03:25 所属栏目: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') 解决方法 更
这是我的代码.我不确定我是否需要一个计数器才能工作.答案应该是’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.
> A list comprehension

''.join([c for c in x if c in 'aeiou'])

此列表理解将返回一个列表,该列表仅在角色位于aeiou时才包含字符
> A generator expression

''.join(c for c in x if c in 'aeiou')

这个gen exp将返回一个生成器,只有当角色在aeiou中时才会返回字符
> Regular Expressions

您可以使用re.findall仅发现字符串中的元音.代码

re.findall(r'[aeiou]',"mississippi")

将返回字符串中找到的元音列表,即[‘i’,’i’,’i’].所以现在我们可以使用str.join然后使用

''.join(re.findall(r'[aeiou]',"mississippi"))

> str.translatemaketrans

对于这种技术,您需要存储一个匹配每个非元音的地图到一个无类型.为此,您可以使用string.ascii_lowecase.制作地图的代码是

str.maketrans({i:None for i in string.ascii_lowercase if i not in "aeiou"})

这将返回映射.将它存储在一个变量中(这里是m表示地图)

"mississippi".translate(m)

这将删除字符串中的所有非aeiou字符.
>使用dict.fromkeys

您可以使用dict.fromkeys和sys.maxunicode.但请记住首先导入sys!

dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')

现在使用str.translate.

'mississippi'.translate(m)

>使用bytearray

正如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返回一个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读