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

在Python中从字符串中删除辅音,python,string,list,python-3.x,python-idle,Python,String,List,Python 3.x,Python Idle,这是我的密码。我不确定我是否需要一个计数器来工作。答案应该是'iii' 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') 更正

这是我的密码。我不确定我是否需要一个计数器来工作。答案应该是
'iii'

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==元音:行是错误的。如果元音中的字符:,则必须是
。这是因为您需要检查元音列表中是否存在该特定字符。除此之外,您还需要
print(char,end='')
(在python3中)将输出打印为
iii

最后的节目将是

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

其他方式包括
  • 字符串中使用

    语句
    if char in'aeiou'
    检查字符串
    aeiou
    中是否存在
    char
    ,看起来很简单

  • def eliminate_consonants(x):
        for char in x:
            if char in 'aeiou':
                print(char,end = "")
    
     ''.join([c for c in x if c in 'aeiou'])
    
    ''.join(c for c in x if c in 'aeiou')
    
    仅当字符位于
    aeiou

  • def eliminate_consonants(x):
        for char in x:
            if char in 'aeiou':
                print(char,end = "")
    
     ''.join([c for c in x if c in 'aeiou'])
    
    ''.join(c for c in x if c in 'aeiou')
    
    此gen exp将返回一个生成器,而仅当字符位于
    aeiou

  • def eliminate_consonants(x):
        for char in x:
            if char in 'aeiou':
                print(char,end = "")
    
     ''.join([c for c in x if c in 'aeiou'])
    
    ''.join(c for c in x if c in 'aeiou')
    
    您可以使用仅查找字符串中的元音。代码

    re.findall(r'[aeiou]',"mississippi")
    
    将返回在字符串中找到的元音列表,即
    ['i','i','i','i']
    。现在我们可以使用
    str.join
    然后使用

    ''.join(re.findall(r'[aeiou]',"mississippi"))
    
  • 对于这种技术,您需要存储一个映射,该映射将每个非元音匹配到
    None
    类型。为此,您可以使用。制作地图的代码是

    str.maketrans({i:None for i in string.ascii_lowercase if i not in "aeiou"})
    
    这将返回映射。务必将其存储在变量中(此处
    m
    用于map)

    这将从字符串中删除所有非
    aeiou
    字符

  • 使用

    您可以将
    dict.fromkeys
    与一起使用。但请记住先导入系统

    dict.fromkeys(i for i in range(sys.maxunicode+1) if chr(i) not in 'aeiou')
    
    现在使用
    str.translate

    'mississippi'.translate(m)
    
  • 使用

    如中所述,您可以使用

    non_vowels = bytearray(set(range(0x100)) - set(b'aeiou'))
    
    用这个我们可以翻译这个词

    'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
    
    'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
    
    它将返回
    b'iii'
    。通过使用
    decode
    b'iii.decode(“ascii”)
    ,可以很容易地将其转换为
    str

  • 使用

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

    用这个我们可以翻译这个词

    'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
    
    'mississippi'.encode('ascii', 'ignore').translate(None, non_vowels)
    
    它将返回
    b'iii'
    。通过使用
    decode
    b'iii.decode(“ascii”)
    ,可以很容易地将其转换为
    str


定时比较 Python 3 时间是按顺序排列的

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
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.5 时间是按顺序排列的

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
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

=
测试是否相等。您正在查看列表“元音”中的字符串中是否存在任何字符。要做到这一点,只需在
中使用
,如下所示

此外,我看到您有一个“元音”变量,但没有使用它。下面是一个如何解决此问题的示例:

def eliminate_consonants(x):
    vowels= ['a','e','i','o','u']
    vowels_found = 0
    for char in x:
        if char in vowels:
            print(char)
            vowels_found += 1

    print "There are", vowels_found, "vowels in", x

eliminate_consonants('mississippi')
您的输出将是:

i
i
i
i
There are 4 vowels in mississippi

你可以试试像这样的肾盂疗法

In [1]: s = 'mississippi'
In [3]: [char for char in s if char in 'aeiou']
Out[3]: ['i', 'i', 'i', 'i']
功能

In [4]: def eliminate_consonants(x):
   ...:     return ''.join(char for char in x if char in 'aeiou')
   ...: 

In [5]: print(eliminate_consonants('mississippi'))
iiii

谢谢!:)感谢您的快速响应。:)请告诉我如何在Python 2.7中一行打印输出,因为:
print(char,end=“”)
似乎只在Paython 3中有效。谢谢。@JoeR
print char,
在py2中(注意后面的逗号)
元音\u found=0
是什么意思?如果需要速度;使用字节并通过testring调用
。翻译(无,非元音)
充其量,这是一个注释,不是答案。错误!我更喜欢
返回“”。加入([char for char in x if char in'aeiou'])
。直接易懂:)@BhargavRao建立中间列表既不必要,也成本高昂。您应该删除那些
[]
。另一种选择是
'.join(过滤器('aeiou.\uU包含\uU,s))
。我测试了一个1000万个小写字母的字符串,Bhargav的方法需要2.16秒,我的需要1.47秒,Bhargav没有创建中间列表需要1.25秒。@StefanPochmann感谢Buddy提供的信息。我会更新答案。@BhargavRao那里的更新也很好,但我的意思是你在这里的评论。只需使用
'.join(char…'aeiou')
而不使用那些
[]