如何使用any函数检查变量是否与列表中的任何项匹配?
发布时间:2020-12-20 13:03:21 所属栏目:Python 来源:网络整理
导读:编辑:这是我想要做的: 我要求用户输入一个月.那么代码将通过检查months_list中的每个项目来查找月份是否正确.如果没有找到,我希望他/她再次进入这个月.. 这是代码: months_list=["January","February","March","April","May","June","July"]answer=raw_in
编辑:这是我想要做的:
我要求用户输入一个月.那么代码将通过检查months_list中的每个项目来查找月份是否正确.如果没有找到,我希望他/她再次进入这个月.. 这是代码: months_list=["January","February","March","April","May","June","July"] answer=raw_input("Month? n") while any(item.lower() != answer.lower() for item in months_list): print("Sorry,didn't recognize your answer,try again") answer=raw_input("Type in Monthn") 然而,无论是否在列表中找到月份,这都会保持循环.我希望这是一个很好的澄清..谢谢大家提前 解决方法
问题是如果iterable中的任何一个元素为True,any()返回True,所以只要答案不等于months_list中的所有字符串,你的代码就会保持循环 – 这可能与你的相反想发生.如果答案匹配任何字符串,这是一种使用它来停止或中断循环的方法:
months_list = ["January","July"] while True: answer = raw_input("Month? ") if any(item.lower() == answer.lower() for item in months_list): break print("Sorry,try again") 正如其他人已经指出的那样,使用Python的运算符会更简单,但是这种方式仍会导致执行线性搜索O(n)…所以更好(更快)的方法是使用一组较低的month_names,它将使用基于哈希表的查找O(1),而不是线性搜索: months = set(month.lower() for month in ("January","July")) while True: answer = raw_input("Month? ") if answer.lower() in months: break print("Sorry,try again") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |