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

在Python中从字符串中删除辅音,第1张

在Python中从字符串中删除辅音 更正您的代码

该行

if char == vowels:
是错误的。它必须是
if char invowels:
。这是因为您需要检查在元音列表中是否存在该特定字符。除此之外,您还需要
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

其他方式包括
  • 使用
    in
    字符串
    def eliminate_consonants(x):for char in x:    if char in 'aeiou':        print(char,end = "")

看起来很简单,该语句

if char in 'aeiou'
检查
char
string中是否存在
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")

将返回在字符串ie中找到的元音列表

['i', 'i', 'i', 'i']
。所以现在我们可以使用
str.join
然后使用

    ''.join(re.findall(r'[aeiou]',"mississippi"))
  • str.translate
    maketrans

对于此技术,您将需要存储一个将每个非元音与

None
类型匹配的映射。为此,您可以使用
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.maxunipre
。但是请记住
importsys
要先!

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

现在使用

str.translate

    'mississippi'.translate(m)
  • 使用
    bytearray

正如JFSebastian在下面的注释中提到的那样,您可以使用以下命令创建小写辅音的字节数组

    non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))

使用这个我们可以翻译单词,

    'mississippi'.enpre('ascii', 'ignore').translate(None, non_vowels)

这将返回

b'iiii'
str
通过使用
depre
ie可以很容易地将其转换为
b'iiii'.depre("ascii")

  • 使用
    bytes

bytes
返回一个字节对象,它是的不可变版本
bytearray
。( 特定于Python 3

    non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))

使用这个我们可以翻译单词,

    'mississippi'.enpre('ascii', 'ignore').translate(None, non_vowels)

这将返回

b'iiii'
str
通过使用
depre
ie可以很容易地将其转换为
b'iiii'.depre("ascii")


时序比较Python 3
python3 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.enpre('ascii', 'ignore').translate(None, non_vowels).depre('ascii')"100000 loops, best of 3: 2.88 usec per looppython3 -m timeit -s "text = 'mississippi'*100; non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))" "text.enpre('ascii', 'ignore').translate(None, non_vowels).depre('ascii')"100000 loops, best of 3: 3.06 usec per looppython3 -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 looppython3 -m timeit -s "import string; import sys; text='mississippi'*100; m = dict.fromkeys(i for i in range(sys.maxunipre+1) if chr(i) not in 'aeiou')" "text.translate(m)"10000 loops, best of 3: 71.6 usec per looppython3 -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 looppython3 -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 looppython3 -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.88translate (bytearray)|  3.06List Comprehension   | 53.2Regular expressions  | 57.0Generator exp        | 60.1dict.fromkeys        | 71.3translate (unipre)  | 71.6

如您所见,最终的使用方法

bytes
是最快的。


Python 3.5
python3.5 -m timeit -s "text = 'mississippi'*100; non_vowels = bytes(set(range(0x100)) - set(b'aeiou'))" "text.enpre('ascii', 'ignore').translate(None, non_vowels).depre('ascii')"100000 loops, best of 3: 4.17 usec per looppython3.5 -m timeit -s "text = 'mississippi'*100; non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))" "text.enpre('ascii', 'ignore').translate(None, non_vowels).depre('ascii')"100000 loops, best of 3: 4.21 usec per looppython3.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 looppython3.5 -m timeit -s "import string; import sys; text='mississippi'*100; m = dict.fromkeys(i for i in range(sys.maxunipre+1) if chr(i) not in 'aeiou')" "text.translate(m)"100000 loops, best of 3: 2.33 usec per looppython3.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 looppython3.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 looppython3.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 (unipre)  |  2.33dict.fromkeys        |  2.39translate (bytes)    |  4.17translate (bytearray)|  4.21List Comprehension   | 86.6Regular expressions  | 74.3Generator exp        | 97.1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5653233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存