当前位置: 首页 > 面试题库 >

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

秦承允
2023-03-14
问题内容

这是我的代码。我不确定是否需要计数器才能正常工作。答案应该是'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

其他方式包括

  • 使用in字符串
    def eliminate_consonants(x):
    for char in x:
        if char in 'aeiou':
            print(char,end = "")
    

看起来很简单,该语句if char in 'aeiou'检查charstring中是否存在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.translatemaketrans

对于此技术,您将需要存储一个将每个非元音与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.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

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

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

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

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

这将返回b'iiii'str通过使用decodeie可以很容易地将其转换为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'str通过使用decodeie可以很容易地将其转换为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是最快的。

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中从字符串中删除辅音?的使用技巧和注意事项,需要的朋友参考一下 对于此问题,使用正则表达式是最简单的。您可以使用“ |”分隔多个字符 并使用re.sub(chars_to_replace,string_to_replace_with,str)。例如: 注意:您也可以使用[]创建要在正则表达式中替换的字符组。 如果只想保

  • 本文向大家介绍在Python中从元组中删除字符串,包括了在Python中从元组中删除字符串的使用技巧和注意事项,需要的朋友参考一下 当需要从元组中删除字符串时,可以使用列表理解和'type'方法。 列表可用于存储异构值(即,任何数据类型的数据,例如整数,浮点数,字符串等)。 元组列表基本上包含包含在列表中的元组。 列表理解是迭代列表并对其执行操作的一种快捷方式。 'type'方法返回作为参数传递给

  • 问题内容: 我想从python中的字符串列表中删除所有空字符串。 我的想法如下: 有没有更多的Python方式可以做到这一点? 问题答案: 我会用: Python 3从返回一个迭代器,因此应包装在对的调用中

  • 问题内容: 我正在尝试使用Python从字符串中删除特定字符。这是我现在正在使用的代码。不幸的是,它似乎对字符串没有任何作用。 如何正确执行此操作? 问题答案: Python中的字符串是不可变的(无法更改)。因此,的效果只是创建一个新字符串,而不是更改旧字符串。你需要重新绑定(分配)到line该变量,以使该变量采用新值,并删除这些字符。 而且,相对而言,你的操作方式会比较缓慢。这也可能会使经验丰富

  • 问题内容: 我目前有以下代码 如果要删除多个字符,这是行不通的。 问题答案: Unicode中有 数百个 控制字符。如果您要清理来自Web或其他可能包含非ASCII字符的其他来源的数据,则需要Python的unicodedata模块。该函数返回任何字符的unicode类别代码(例如,控制字符,空格,字母等)。对于控制字符,类别始终以“ C”开头。 此代码段从字符串中删除所有控制字符。 unicod

  • 问题内容: 我们如何从Python字符串中删除所有非数字字符? 问题答案: