如何针对2个可能的值检查变量?

pyt*_*ies 20 python

我有一个变量s,其中包含一个字母的字符串

s = 'a'
Run Code Online (Sandbox Code Playgroud)

根据该变量的值,我想返回不同的东西.到目前为止,我正在做一些事情:

if s == 'a' or s == 'b':
   return 1
elif s == 'c' or s == 'd':
   return 2
else: 
   return 3
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?一个更Pythonic的方式?或者这是最有效的?

以前,我错误地有这样的事情:

if s == 'a' or 'b':
   ...
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,对我来说相当愚蠢.

我知道条件赋值并试过这个:

return 1 if s == 'a' or s == 'b' ...
Run Code Online (Sandbox Code Playgroud)

我想我的问题是专门有一种方法可以将变量与两个值进行比较,而无需键入 something == something or something == something

Jes*_*lon 42

if s in ('a', 'b'):
    return 1
elif s in ('c', 'd'):
    return 2
else:
    return 3
Run Code Online (Sandbox Code Playgroud)

  • @pythonrubies - 如果这是你要找的,接受它作为答案.@Jesse - 我建议使用元组代替列表作为代码片段. (2认同)
  • @Dan,有两个原因.首先,元组是不可变的,所以在语义上将它们用于不会改变的值是有意义的.在这种情况下,您将始终与`a,b,c,d`进行比较,并且这些值在编译时是已知的,因此语义上正确的解决方案是使用不可变类型.其次,与第一个相关,当你使用元组时会提高性能/效率,我不记得细节,但你会期望元组使用更少的内存并更快地实例化. (2认同)

Jam*_*oth 12

 d = {'a':1, 'b':1, 'c':2, 'd':2}
 return d.get(s, 3)
Run Code Online (Sandbox Code Playgroud)

  • 它甚至可以进一步减少:`return {'a':1, 'b':1, 'c':2, 'd':2}.get(s, 3)` (2认同)