list = [“ aeouis ...,。,, esw”,“ trees ..,ioee”,'“ ..... wwqqow ..”,“ ...,... ,,” ,“ uouiyteerff .. ,,”,“,w,”]
我需要创建第二个列表作为输出。每个元素的输出将是该元素中存在的唯一元音,或者高:对于STRIN中75%或更多的元音,中:元素中40-75%的元音,low:如果元素中的元音少于40%或
无元音:如果字符串中没有元音。
和Null:如果字符串长度小于5。
所以输出将像:[[a,e,o,u,i] low,[e,i,o] medium,没有元音,没有元音,[u,o,i,e] low,NULL ]
我们可以使用列表理解吗?
我会这样:
from enum import Enum
from typing import List, Set, Tuple
VOWELS = set("aeiou")
class VowelScore(Enum):
HIGH = "High" # vowels >= 0.75
MEDIUM = "medium" # 0.75 > vowels >= .040
LOW = "low" # 0.40 > vowels
NO_VOWELS = "No vowels" # no vowels
NULL = "Null" # len < 5
def get_vowel_score(element: str) -> VowelScore:
if len(element) < 5:
return VowelScore.NULL
vowels = [c for c in element if c in VOWELS]
if len(vowels) == 0:
return VowelScore.NO_VOWELS
vowel_ratio = len(vowels) / len(element)
if vowel_ratio < 0.40:
return VowelScore.LOW
if vowel_ratio < 0.75:
return VowelScore.MEDIUM
return VowelScore.HIGH
def get_vowel_list(elements: List[str]) -> List[Tuple[Set[str], VowelScore]]:
return [
(VOWELS & set(element), get_vowel_score(element))
for element in elements
]