加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用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")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读