【问题标题】:Using OR comparisons with IF statements [duplicate]对 IF 语句使用 OR 比较 [重复]
【发布时间】:2010-09-13 23:10:22
【问题描述】:

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

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"

【问题讨论】:

    标签: python comparison boolean


    【解决方案1】:
    if job in ("mechanic", "tech"):
        print "awesome"
    elif job in ("tool", "rock"):
        print "dolt"
    

    括号中的值是一个元组。 in 运算符检查左侧项目是否出现在右侧句柄元组内的某个位置。

    请注意,当 Python 使用 in 运算符搜索元组或列表时,它会进行线性搜索。如果右侧有大量项目,这可能是性能瓶颈。更大规模的做法是使用frozenset

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

    如果在程序运行期间不需要更改出色作业列表,则首选使用 frozenset 而不是 set

    【讨论】:

    • 既然您有已接受的答案,为了完整起见,最好还提及item in set() 操作。
    【解决方案2】:

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

    元组和列表都对 in 运算符使用线性搜索。 Sets 使用基于散列的查找,因此对于更多的选项会更快。

    【讨论】:

      【解决方案3】:

      你可以用在:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          if job in [ "mechanic", "tech" ]:
              print "awesome"
          elif job in [ "tool", "rock" ]:
              print "dolt"
          

          【讨论】:

            【解决方案6】:
            if job in ("mechanic", "tech"):
                print "awesome"
            elif job in ("tool", "rock"):
                print "dolt"
            

            【讨论】:

              猜你喜欢
              • 2013-07-19
              • 1970-01-01
              • 1970-01-01
              • 2018-08-13
              • 1970-01-01
              • 1970-01-01
              • 2022-10-01
              • 2012-12-15
              • 2013-12-02
              相关资源
              最近更新 更多