在IF语句中使用OR比较
时间:2020-03-06 14:52:02 来源:igfitidea点击:
在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"
解决方案
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
。
if job in ("mechanic", "tech"): print "awesome" elif job in ("tool", "rock"): print "dolt"
虽然我认为我们无法直接做我们想做的事,但一种选择是:
if job in [ "mechanic", "tech" ]: print "awesome" elif job in [ "tool", "rock" ]: print "dolt"
在其他语言中,我将使用switch / select语句来完成工作。我们也可以在python中做到这一点。
我们可以在以下位置使用:
if job in ["mechanic", "tech"]: print "awesome"
当检查非常大的数字时,可能还需要保存一组要检查的项目,因为这样做会更快。例如。
AwesomeJobs = set(["mechanic", "tech", ... lots of others ]) ... def func(): if job in AwesomeJobs: print "awesome"
具有常量项的元组将自身作为常量存储在已编译的函数中。它们可以用一条指令加载。另一方面,列表和集合总是在每次执行时重新构建。
元组和列表都使用线性搜索作为运算符。集使用基于散列的查找,因此对于大量选项,它将更快。