如何将嵌套for循环的性别判断函数转换为list comprehension?
嵌套循环转惰性求值实现的方案
可以实现,用生成器表达式配合next()能完美贴合原函数的逻辑(找到第一个匹配就停止遍历),代码如下:
def find_gender(gender_data): gender = { "Women": ["women", "women's", "female"], "Men": ["men", "men's", "male"], } gender_data_lower = gender_data.lower() # 生成器遍历匹配项,next()取第一个匹配值,无匹配则返回默认值"Unisex" return next((key for key, items in gender.items() for word in items if word in gender_data_lower), "Unisex")
细节说明
- 原函数的
gender_data.find(word) is not -1等价于更简洁的word in gender_data_lower,逻辑完全一致 - 选用生成器表达式而非列表推导式:生成器是惰性计算,找到第一个匹配项就停止遍历,和原函数中找到匹配就立即
return的逻辑一致,避免不必要的遍历,效率更高 next()的第二个参数为默认值,当生成器无元素(即无匹配关键词)时,自动返回"Unisex"
内容的提问来源于stack exchange,提问作者Malik Zohaib Mustafa
相关产品推荐
相关产品推荐

