Python字符串比较元音

2024-04-16 06:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个Python函数,它接受两个字符串作为参数,并返回它们是否有相同的元音(数量无关紧要)。在

因此('really','bed')应该返回true,但是('reased','irate')应该返回false。在

我被这个可怕的尝试困住了。。。在

def vocalizer(string_a,string_b):
vowels = ['a', 'e', 'i', 'o', 'u']
result = ''
result_2 = ''
for character in string_a:
    if character in vowels:
       result = result + character
       for item in string_b:
            if item in vowels:
               result_2 = result_2 + item
               for vowel in result:
                    if vowel not in list(result_2):
                       return False
                    else:
                       if vowel in list(result_2):
                          return True

Tags: 函数字符串infor参数stringreturnif
3条回答

我将使用set intersection从每个字符串中提取元音。像这样:

all_vowels = set('aeiou')

def vowel_set(s):
    return all_vowels.intersection(s.lower())

def same_vowels(s1, s2):
    return vowel_set(s1) == vowel_set(s2)

print same_vowels('deed', 'bed')
print same_vowels('indeed', 'irate')
print same_vowels('DEAD', 'earnest')
print same_vowels('blue', 'ICE')

输出

^{pr2}$

简短而富有表现力:

def keep_only_vowels(s):
    vowels = ('a', 'e', 'i', 'o', 'u')
    return (c for c in s.lower() if c in vowels)

def vocalizer(s1, s2):
    return set(keep_only_vowels(s1)) == set(keep_only_vowels(s2))

您自己的代码可以很容易地改进,因为您的总体策略是正确的:

def vocalizer(string_a,string_b):
    vowels = ['a', 'e', 'i', 'o', 'u']
    result = ''
    result_2 = ''
    for character in string_a:
       if character in vowels:
           result += character
    for item in string_b:
        if item in vowels:
            result_2 += item

    result = set(list(result))
    result_2 = set(list(result_2))
    #print("result= {}".format(result))
    #print("result_2= {}".format(result_2))
    if result == result_2:
        return True
    else:
        return False

当你去掉辅音的单词时,你可以简单地从字符串中创建一个列表,然后通过将它们转换成集合来删除重复的元素。最后,你可以比较一下,看看它们是否相等。例如:

^{pr2}$

相关问题 更多 >