新手到Python。我被要求编写一个函数sameVowels(s1,s2),给定2个字符串s1,s2,如果两个字符串具有完全相同的元音(种类和数字),则返回True。 (想想如何使用词典..)
我试过了:
import string
def sameVowels( s1 , s2 ) :
d1 = {}
d2 = {}
vowels = [ 'a' , 'e' , 'i' , 'o' , 'u' ]
for v1 in s1 :
for k1 in vowels :
if v1 == k1 :
d1[k1] = v1
for v2 in s2 :
for k2 in vowels :
if v2 == k2 :
d2[k2] = v2
print d1
print d2
return d1 == d2
print sameVowels( 'aabcefiok' , 'xcexvcxaioa' )
print sameVowels( 'aabcefiok' , 'xcexvcxaioia' )
但我得到的是:
{'a': 'a', 'i': 'i', 'e': 'e', 'o': 'o'}
{'a': 'a', 'i': 'i', 'e': 'e', 'o': 'o'}
True
{'a': 'a', 'i': 'i', 'e': 'e', 'o': 'o'}
{'a': 'a', 'i': 'i', 'e': 'e', 'o': 'o'}
True
最后一对应该给出False,因为第二个字符串有一个额外的“i” 我真的不知道该怎么做 请帮助:)
答案 0 :(得分:1)
您可能希望存储{vowel : ocurrences}
之类的对,因此请尝试修改2 for
语句中的逻辑:
for v1 in s1 : # Iterate over string1
if v1 in vowels: # Check if each letter is a vowel
if v1 in d1: # If the vowel is in dict1
d1[v1] += 1 # Add 1 to the actual value
else:
d1[v1] = 1 # Add the vowel to dict1
第二个for
的相同内容:
for v2 in s2 :
if v2 in vowels:
if v2 in d2:
d2[v2] += 1
else:
d2[v2] = 1
答案 1 :(得分:0)
一个稍微简单但性能较差的版本(因为我们计算每个字母):
def sameVowels(s1,s2):
vowels = [ 'a' , 'e' , 'i' , 'o' , 'u' ]
f1 = dict((letter, s1.count(letter)) for letter in vowels)
f2 = dict((letter, s2.count(letter)) for letter in vowels)
return f1==f2
另一种选择:
from collections import Counter
def sameVowels(s1,s2):
vowels = [ 'a' , 'e' , 'i' , 'o' , 'u' ]
filtered1 = filter(lambda x: x in vowels, s1)
filtered2 = filter(lambda x: x in vowels, s2)
f1 = Counter(filtered1)
f2 = Counter(filtered2)
return f1==f2