我想在Python中找到带有最大元音的字符串,但我不知道如何。
输入
['Zak6aa','kak','ll','ak']
输出:
['Zak6aa']
如果两个或多个字符串绑定最大元音,则为另一个:
['Zaa', 'bii','ak']
输出是:
['Zaa', 'bii']
我的尝试:
def maxv(string):
sam=0
seq=[]
for i in range(len(string)):
k=0
v=0
for char in string[i]:
if char in "aeiouy":
v = v+1
k=(len(string[i]))-v
if (v >=k):
seq=seq+[string[i]]
return seq
答案 0 :(得分:1)
使用循环的一种解决方案。
l=['Zak6aa','kak','ll','ak']
L={}
for x in l:
cnt=x.count('a')+x.count('e')+x.count('i')+x.count('e')+x.count('u')
if cnt not in L.keys():
L[cnt]=[]
L[cnt].append(x)
print(L[max(L.keys())])
您可以使用re
import re
cnt=len(re.findall(r'[aeiou]{1}',x))
答案 1 :(得分:0)
你可以按元音数量sort
:
l = ['Zak6aa','kak','ll','ak']
sorted(l, key=lambda x: sum(1 for y in x if y in 'aeiouAEIOU'), reverse=True)
['Zak6aa', 'kak', 'ak', 'll']
如果你需要具有相同最大长度的所有人,你可以在排序之前使用带有元音数量的zip,然后只过滤更高的"分数":
l = ['Zaa', 'bii','ak']
slist =sorted(zip(map(lambda x: sum(1 for y in x if y in 'aeiouAEIOU'), l), l), reverse=True)
filter(lambda x: x[0] == slist[0][0], slist)
[(2, 'bii'), (2, 'Zaa')]
答案 2 :(得分:0)
谢谢大家
如何在Python中打印选择排序中的交换次数? 例如 输出`
[1,2,3,4,5,6,7,9,8]
` 输入
1
因为有1个交换9与8。
def min(list, fromw):
m = fromw
for i in range(fromw + 1,len(list)):
if list[i] < list[m]:
m = i
return m
def select(list):
for promt in range(len(list)):
where = min(list, promt)
list[where], list[promt] = list[promt], list[where]
return list
答案 3 :(得分:0)
我试图以较低的复杂度解决此问题:
sample_string="i am a sample string find word with maximum vowel"
length=len(sample_string)
count=0
max_count=0
word=""
max_word=""
for i in range(length):
if(sample_string[i].isspace()):
if(count>max_count):
max_count=count
max_word=word
count=0
word=""
elif(sample_string[i]=='a' or sample_string[i]=='e' or
sample_string[i]=='i' or sample_string[i]=='o' or
sample_string[i]=='u'):
count=count+1
word=word+sample_string[i]
print(max_word)