我写了一个比较2个字符串的函数脚本,并告诉我们是否有相同的元音(种类和数字)。
例如:
sameVowels('aabcefiok','xcexvcxaioa') should return `true`
和sameVowels('aabcefiok','xcexvcxaioia')
应该返回false
这是我基于列表的尝试。它不能很好地工作,我不知道为什么;在这个具体示例中,它为两者返回true
。
def sameVowels(s1, s2):
L1=[]
L2=[]
L_vowles=['a','e','i', 'o','u','A','E','I','O', 'U'] #dont know how to use str.upper/lower on lists...
for i in s1:
if i in L_vowles:
L1.append(i)
for i in s2:
if i in L_vowles:
L2.append(i)
for i in L1:
L1.count(i)
for i in L2:
L2.count(i)
return L1.count(i)== L2.count(i)
如你所见,我创建了一些愚蠢的名单--L_vowels ......
我考虑使用sets
,但我认为它不会有用,因为我不能用它进行任何计数。
1.我的尝试怎么了?
dictionary
?谢谢!
答案 0 :(得分:5)
只需使用生成器表达式并排序:
def vowels(x):
return (i for i in x if i.lower() in "aeiou")
def same_vowels(a, b):
return sorted(vowels(a)) == sorted(vowels(b))
答案 1 :(得分:2)
将两个字符串小写,将其过滤到元音,然后使用import collections
def same_vowels(s1, s2):
return collections.Counter(letter for letter in s1.lower() if letter in 'aeiou'
) == collections.Counter(letter for letter in s2.lower() if letter in 'aeiou')
并比较结果:
>>> same_vowels('aabcefiok','xcexvcxaioa')
True
结果:
[Error: Module version mismatch. Expected 46, got 14. This generally implies that leveldown was built with a different version of node than that which is running now. You may try fully removing and reinstalling PouchDB or leveldown to resolve.]
答案 2 :(得分:1)
回答你的第一个问题
def sameVowels(s1, s2):
L1=[]
L2=[]
L_vowles=['a','e','i', 'o','u','A','E','I','O', 'U'] #dont know how to use str.upper/lower on lists...
for i in s1:
if i in L_vowles:
L1.append(i)
for i in s2:
if i in L_vowles:
L2.append(i)
从现在开始,它开始毫无意义。你写了LI.count(i)
,但那什么都不做。然后比较LI.count(i) == L2.count(i)
,它只会比较分配给i
的最后一个值的计数,而不是我假设的所有值的计数。为了纠正这个问题,你应该有类似的东西
if (len(L1) == len(L2)):
for i in L1:
if (L1.count(i) != L2.count(i)):
return false
return true
return false
这样,你就比较了所有的值并在两种情况下返回false:首先,如果列表的长度不同,即其中一个有元音而另一个没有元音;第二,如果他们的数量不同(我实际上并不理解为什么他们的数量应该相同,但这是你的方法)
关于第二个问题..
您可以通过构建将元音存储为key
并将其计为value
的字典来实现。然后,比较两个dict
构建的是否相等。
答案 3 :(得分:0)
据我所知,每个元音的数量也需要考虑在内。以下是我的看法:
def getVowelsOf(s):
vowels = set(['a', 'e', 'i', 'o', 'u'])
sVowels = {}
for c in s.lower():
if c in vowels:
if c in sVowels:
sVowels[c] = sVowels[c] + 1
else:
sVowels[c] = 1
return sVowels
def sameVowels(s1, s2):
s1Vowels = getVowelsOf(s1)
s2Vowels = getVowelsOf(s2)
return cmp(s1Vowels, s2Vowels) == 0