代码之家  ›  专栏  ›  技术社区  ›  crystalattice

使用或比较if语句[重复]

  •  9
  • crystalattice  · 技术社区  · 16 年前

    这个问题已经有了答案:

    在Python中使用if语句时,必须执行以下操作才能使“cascade”正常工作。

    if job == "mechanic" or job == "tech":
            print "awesome"
    elif job == "tool" or job == "rock":
            print "dolt"
    

    当检查“等于”时,是否有一种方法使python接受多个值?例如,

    if job == "mechanic" or "tech":
        print "awesome"
    elif job == "tool" or "rock":
        print "dolt"
    
    6 回复  |  直到 15 年前
        1
  •  30
  •   Greg Hewgill    16 年前
    if job in ("mechanic", "tech"):
        print "awesome"
    elif job in ("tool", "rock"):
        print "dolt"
    

    括号中的值是一个元组。这个 in 操作员检查左侧项是否出现在右手柄元组内的某个位置。

    注意,当python使用 在里面 运算符,它执行线性搜索。如果右侧有大量的项目,这可能是性能瓶颈。更大规模的方法是使用 frozenset :

    AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
    def func():
        if job in AwesomeJobs:
            print "awesome"
    

    使用 弗洛伦塞特 结束 set 如果在程序运行期间不需要更改出色工作的列表,则首选。

        2
  •  3
  •   Brian    16 年前

    你可以使用:

    if job  in ["mechanic", "tech"]:
        print "awesome"
    

    当检查非常大的数字时,可能还值得存储一组要检查的项目,因为这将更快。如。

    AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
    ...
    
    def func():
        if job in AwesomeJobs:
            print "awesome"
    
        3
  •  1
  •   Alexander Kojevnikov    16 年前
    if job in ("mechanic", "tech"):
        print "awesome"
    elif job in ("tool", "rock"):
        print "dolt"
    
        4
  •  1
  •   Jason Etheridge    16 年前

    虽然我认为你不能直接做你想做的事,但另一种选择是:

    if job in [ "mechanic", "tech" ]:
        print "awesome"
    elif job in [ "tool", "rock" ]:
        print "dolt"
    
        5
  •  1
  •   Markus Jarderot    16 年前

    带有常量项的元组本身存储为已编译函数中的常量。它们可以用一条指令加载。另一方面,列表和集合总是在每次执行时重新构造。

    元组和列表都对in运算符使用线性搜索。集合使用基于哈希的查找,因此对于更多选项,查找速度更快。

        6
  •  0
  •   Oli    16 年前

    在其他语言中,我将使用switch/select语句来完成任务。 You can do that in python too .