【问题标题】:How to test multiple variables for equality against a single value?如何测试多个变量是否与单个值相等?
【发布时间】:2022-11-06 12:47:58
【问题描述】:

我正在尝试制作一个函数,它将多个变量与一个整数进行比较并输出一个由三个字母组成的字符串。我想知道是否有办法将其翻译成 Python。所以说:

x = 0
y = 1
z = 3
mylist = []

if x or y or z == 0:
    mylist.append("c")
if x or y or z == 1:
    mylist.append("d")
if x or y or z == 2:
    mylist.append("e")
if x or y or z == 3: 
    mylist.append("f")

这将返回一个列表:

["c", "d", "f"]

【问题讨论】:

  • 在(元组)中使用1
  • 当您想以任何/所有方式评估语句列表时,您可以使用any/all函数。例如:all([1, 2, 3, 4, False]) 将返回 False all([True, 1, 2, 3]) 将返回 True any([False, 0, 0, False]) 将返回 False any([False, 0, True, False]) 将返回 True
  • 这个问题是一个非常受欢迎的重复目标,但我认为它不是这个目的的最佳选择。大多数人尝试做类似if x == 0 or 1: 的事情,这当然类似于if x or y == 0:,但对于新手来说可能有点混乱。鉴于庞大的数量“为什么我的x == 0 or 1 不工作?”问题,我更愿意使用 this question 作为这些问题的规范重复目标。
  • 00.0False 等“虚假”值进行比较时要格外小心。你很容易写出给出“正确”答案的错误代码。

标签: python if-statement comparison match boolean-logic


【解决方案1】:

您误解了布尔表达式的工作原理;它们不像英语句子那样工作,我猜你在这里谈论的是对所有名字的相同比较。您正在寻找:

if x == 1 or y == 1 or z == 1:

xy 会自行评估(False 如果 0,否则 True)。

您可以使用针对 a tuple 的包含测试来缩短它:

if 1 in (x, y, z):

或者更好:

if 1 in {x, y, z}:

使用 a set 来利用恒定成本成员资格测试(即 in 无论左侧操作数是什么,都需要固定的时间)。

解释

当您使用or 时,python 将运算符的每一侧视为分离表达式。表达式 x or y == 1 首先被视为 x 的布尔测试,然后如果为 False,则测试表达式 y == 1

这是由于operator precedenceor 运算符的优先级低于 == 测试,因此评估后者第一的.

然而,即使这是不是在这种情况下,表达式 x or y or z == 1 实际上被解释为 (x or y or z) == 1 相反,这仍然不会执行您期望的操作。

x or y or z 将评估为“真实”的第一个参数,例如不是 False,数字 0 或空(有关 Python 在布尔上下文中认为 false 的详细信息,请参阅 boolean expressions)。

因此,对于值 x = 2; y = 1; z = 0x or y or z 将解析为 2,因为这是参数中的第一个类真值。那么2 == 1 将是False,即使y == 1 将是True

这同样适用于逆;针对单个变量测试多个值; x == 1 or 2 or 3 会因为同样的原因而失败。使用x == 1 or x == 2 or x == 3x in {1, 2, 3}

【讨论】:

  • 我不会那么快选择set 版本。元组的创建和迭代非常便宜。至少在我的机器上,只要元组的大小在 4-8 个元素左右,元组就比集合快。如果您必须扫描更多,请使用集合,但如果您要从 2-4 种可能性中寻找一个项目,元组仍然更快!如果你能把最有可能的情况安排在元组中的第一个,那么胜利就更大了:(我的测试:timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1))))
  • @dequestarmappartialsetattr:在 Python 3.3 及更高版本中,该集合作为常量存储,完全绕过创建时间,消除了创建时间。元组能够创建起来很便宜,因为 Python 缓存了它们的捆绑包以避免内存流失,这是这里与集合的最大区别。
  • @dequestarmappartialsetattr:如果你有时间只是成员资格测试,对于整数集和元组在理想情况下同样快;匹配第一个元素。在那之后,元组输给了集合。
  • @MartijnPieters:除非set 文字的内容也是文字,否则在此测试中使用set 文字符号并不能节省开支,对吧? if 1 in {x, y, z}: 无法缓存set,因为xyz 可能会发生变化,因此任何一种解决方案都需要从头开始构建tupleset,我怀疑任何查找节省当检查成员身份会被更长的 set 创建时间淹没时,您可能会遇到这种情况。
  • @ShadowRanger:是的,窥孔优化(针对in [...]in {...})仅在列表或集合的内容也是不可变文字时才有效。
【解决方案2】:

使用字典结构可以更轻松地解决您的问题,例如:

x = 0
y = 1
z = 3
d = {0: 'c', 1:'d', 2:'e', 3:'f'}
mylist = [d[k] for k in [x, y, z]]

【讨论】:

  • 甚至 d = "cdef" 导致 MyList = ["cdef"[k] for k in [x, y, z]]
  • map(lambda i: 'cdef'[i], [x, y, z])
  • 除了我还没有完全习惯的列表理解之外,我们大多数人都有相同的反应:构建那个 dict !
【解决方案3】:

正如 Martijn Pieters 所述,正确且最快的格式是:

if 1 in {x, y, z}:

使用他的建议,您现在将拥有单独的 if 语句,这样 Python 将读取每个语句,无论前者是 True 还是 False。例如:

if 0 in {x, y, z}:
    mylist.append("c")
if 1 in {x, y, z}:
    mylist.append("d")
if 2 in {x, y, z}:
    mylist.append("e")
...

这会起作用,但是如果你很习惯使用字典(看看我在那里做了什么),你可以通过制作一个将数字映射到你想要的字母的初始字典来清理它,然后只使用一个 for 循环:

num_to_letters = {0: "c", 1: "d", 2: "e", 3: "f"}
for number in num_to_letters:
    if number in {x, y, z}:
        mylist.append(num_to_letters[number])

【讨论】:

  • @VisioN 你是说for number in num_to_letters?你不需要.keys(),默认情况下,dicts 遍历键。关于使用字符串,你的意思是这样的,对吧? for i, c in enumerate('cdef'): if i in {x, y, z}: mylist.append(c)同意,那会更简单。或者更好,s = 'cdef'; mylist = [s[i] for i in [x, y, z]]
  • @wjandrea 是的,你是对的,这是我的错!我完全忘记了默认行为。不幸的是,我无法编辑我的评论,所以我删除了它,因为您在评论中强调了更好的方法。
【解决方案4】:

x or y or z == 0的直接写法是

if any(map((lambda value: value == 0), (x,y,z))):
    pass # write your logic.

但我不认为,你喜欢它。 :) 而且这种方式很丑陋。

另一种方式(更好)是:

0 in (x, y, z)

顺便说一句,很多ifs 可以写成这样

my_cases = {
    0: Mylist.append("c"),
    1: Mylist.append("d")
    # ..
}

for key in my_cases:
    if key in (x,y,z):
        my_cases[key]()
        break

【讨论】:

  • 在您使用 dict 而不是键的示例中,您会收到错误,因为 .append 的返回值为 None,而调用 None 会得到 AttributeError。不过,总的来说,我同意这种方法。
  • 字典而不是键是错误的,即使您注释掉“for..loop”部分,当字典初始化时您也会得到 Mylist=['c', 'd']
  • 在您的第一个示例中,filter 会比map 更好,因为它将仅返回 lambda 计算结果为真的实例
  • 理解比 lambda 的映射简单得多:any(v == 0 for v in (x, y, z))
【解决方案5】:

如果你非常非常懒惰,你可以将值放在一个数组中。如

list = []
list.append(x)
list.append(y)
list.append(z)
nums = [add numbers here]
letters = [add corresponding letters here]
for index in range(len(nums)):
    for obj in list:
        if obj == num[index]:
            MyList.append(letters[index])
            break

您也可以将数字和字母放入字典中并执行此操作,但这可能比简单的 if 语句复杂得多。这就是你尝试变得格外懒惰的结果:)

还有一件事,你的

if x or y or z == 0:

会编译,但不是你想要的方式。当您简单地将变量放入 if 语句时(示例)

if b

该程序将检查变量是否不为空。编写上述语句的另一种方法(更有意义)是

if bool(b)

Bool 是 python 中的一个内置函数,它基本上执行验证布尔语句的命令(如果你不知道那是什么,这就是你现在试图在你的 if 语句中做的:))

我发现的另一种懒惰的方式是:

if any([x==0, y==0, z==0])

【讨论】:

  • -1 这里有很多不好的做法。 list 是 Python 内置函数;请改用其他名称,例如 xyz。当你可以做一个时,为什么要分四步构建列表,即xyz = [x, y, z]?不要使用并行列表,而是使用字典。总而言之,这个解决方案比ThatGuyRussell's复杂得多。同样对于最后一部分,为什么不做一个理解,即any(v == 0 for v in (x, y, z))?另外 arrays 是 Python 中的其他内容。
【解决方案6】:

要检查一个值是否包含在一组变量中,您可以使用内置模块itertoolsoperator

例如:

进口:

from itertools import repeat
from operator import contains

声明变量:

x = 0
y = 1
z = 3

创建值的映射(按照您要检查的顺序):

check_values = (0, 1, 3)

使用 itertools 允许重复变量:

check_vars = repeat((x, y, z))

最后,使用 map 函数创建一个迭代器:

checker = map(contains, check_vars, check_values)

然后,在检查值时(按原始顺序),使用next()

if next(checker)  # Checks for 0
    # Do something
    pass
elif next(checker)  # Checks for 1
    # Do something
    pass

ETC...

这比 lambda x: x in (variables) 有优势,因为 operator 是一个内置模块,比使用必须创建自定义就地函数的 lambda 更快、更高效。

检查列表中是否存在非零(或 False)值的另一个选项:

not (x and y and z)

相等的:

not all((x, y, z))

【讨论】:

  • 这没有回答 OP 的问题。它仅涵盖所提供示例中的第一种情况。
【解决方案7】:

Set 是这里的好方法,因为它对变量进行排序,这似乎是您的目标。 {z,y,x}{0,1,3} 无论参数的顺序如何。

>>> ["cdef"[i] for i in {z,x,y}]
['c', 'd', 'f']

这样,整个解决方案就是 O(n)。

【讨论】:

    【解决方案8】:

    我认为这会更好地处理它:

    my_dict = {0: "c", 1: "d", 2: "e", 3: "f"}
    
    def validate(x, y, z):
        for ele in [x, y, z]:
            if ele in my_dict.keys():
                return my_dict[ele]
    

    输出:

    print validate(0, 8, 9)
    c
    print validate(9, 8, 9)
    None
    print validate(9, 8, 2)
    e
    

    【讨论】:

      【解决方案9】:

      如果要使用 if, else 语句,下面是另一种解决方案:

      myList = []
      aList = [0, 1, 3]
      
      for l in aList:
          if l==0: myList.append('c')
          elif l==1: myList.append('d')
          elif l==2: myList.append('e')
          elif l==3: myList.append('f')
      
      print(myList)
      

      【讨论】:

        【解决方案10】:

        这里提供的所有优秀答案都集中在原始海报的具体要求上,集中在 Martijn Pieters 提出的if 1 in {x,y,z} 解决方案上。
        他们忽略的是这个问题更广泛的含义:
        如何针对多个值测试一个变量?
        如果使用字符串,则提供的解决方案将不适用于部分命中:
        测试字符串“Wild”是否在多个值中

        >>> x = "Wild things"
        >>> y = "throttle it back"
        >>> z = "in the beginning"
        >>> if "Wild" in {x, y, z}: print (True)
        ... 
        

        或者

        >>> x = "Wild things"
        >>> y = "throttle it back"
        >>> z = "in the beginning"
        >>> if "Wild" in [x, y, z]: print (True)
        ... 
        

        对于这种情况,最容易转换为字符串

        >>> [x, y, z]
        ['Wild things', 'throttle it back', 'in the beginning']
        >>> {x, y, z}
        {'in the beginning', 'throttle it back', 'Wild things'}
        >>> 
        
        >>> if "Wild" in str([x, y, z]): print (True)
        ... 
        True
        >>> if "Wild" in str({x, y, z}): print (True)
        ... 
        True
        

        然而,应该注意的是,正如@codeforester 所提到的,这种方法会丢失单词边界,如下所示:

        >>> x=['Wild things', 'throttle it back', 'in the beginning']
        >>> if "rot" in str(x): print(True)
        ... 
        True
        

        3 个字母 rot 确实在列表中组合存在,但不是作为单个单词存在。测试“rot”会失败,但如果列表项之一是“rot in hell”,那也会失败。
        结果是,如果使用此方法,请注意您的搜索条件,并注意它确实有此限制。

        【讨论】:

          【解决方案11】:
          d = {0:'c', 1:'d', 2:'e', 3: 'f'}
          x, y, z = (0, 1, 3)
          print [v for (k,v) in d.items() if x==k or y==k or z==k]
          

          【讨论】:

            【解决方案12】:

            此代码可能有帮助

            L ={x, y, z}
            T= ((0,"c"),(1,"d"),(2,"e"),(3,"f"),)
            List2=[]
            for t in T :
            if t[0] in L :
                List2.append(t[1])
                break;
            

            【讨论】:

              【解决方案13】:

              您可以尝试下图所示的方法。在此方法中,您可以自由指定/输入您希望输入的变量数量。

              mydict = {0:"c", 1:"d", 2:"e", 3:"f"}
              mylist= []
              
              num_var = int(raw_input("How many variables? ")) #Enter 3 when asked for input.
              
              for i in range(num_var): 
                  ''' Enter 0 as first input, 1 as second input and 3 as third input.'''
                  globals()['var'+str('i').zfill(3)] = int(raw_input("Enter an integer between 0 and 3 "))
                  mylist += mydict[globals()['var'+str('i').zfill(3)]]
              
              print mylist
              >>> ['c', 'd', 'f']
              

              【讨论】:

                【解决方案14】:

                一线解决方案:

                mylist = [{0: 'c', 1: 'd', 2: 'e', 3: 'f'}[i] for i in [0, 1, 2, 3] if i in (x, y, z)]
                

                或者:

                mylist = ['cdef'[i] for i in range(4) if i in (x, y, z)]
                

                【讨论】:

                  【解决方案15】:

                  也许您需要输出位集的直接公式。

                  x=0 or y=0 or z=0   is equivalent to x*y*z = 0
                  
                  x=1 or y=1 or z=1   is equivalent to (x-1)*(y-1)*(z-1)=0
                  
                  x=2 or y=2 or z=2   is equivalent to (x-2)*(y-2)*(z-2)=0
                  

                  让我们映射到位:'c':1 'd':0xb10 'e':0xb100 'f':0xb1000

                  isc(是'c')的关系:

                  if xyz=0 then isc=1 else isc=0
                  

                  使用数学公式https://youtu.be/KAdKCgBGK0k?list=PLnI9xbPdZUAmUL8htSl6vToPQRRN3hhFp&t=315

                  [c]: (xyz=0 and isc=1) or (((xyz=0 and isc=1) or (isc=0)) and (isc=0))

                  [d]: ((x-1)(y-1)(z-1)=0 and isc=2) or (((xyz=0 and isd=2) or (isc=0)) and (isc=0))

                  ...

                  通过以下逻辑连接这些公式:

                  • 逻辑and是方程的平方和
                  • 逻辑or是方程的乘积

                  你会有一个总方程 表达总和,你有总和的公式

                  那么sum&1是c,sum&2是d,sum&4是e,sum&5是f

                  在此之后,您可以形成预定义数组,其中字符串元素的索引将对应于准备好的字符串。

                  array[sum] 给你字符串。

                  【讨论】:

                    【解决方案16】:

                    在 Python 中表示伪代码的最 Pythonic 方式是:

                    x = 0
                    y = 1
                    z = 3
                    mylist = []
                    
                    if any(v == 0 for v in (x, y, z)):
                        mylist.append("c")
                    if any(v == 1 for v in (x, y, z)):
                        mylist.append("d")
                    if any(v == 2 for v in (x, y, z)):
                        mylist.append("e")
                    if any(v == 3 for v in (x, y, z)):
                        mylist.append("f")
                    

                    【讨论】:

                    • 这种方法比 if 2 in (x, y, z): mylist.append('e') 更通用,因为它允许任意比较(例如 if any(v >= 42 for v in (x, y, z)): )。所有 3 种方法(2 in {x,y,z}2 in (x,y,z)any(_v == 2 for _v in (x,y,z)))的性能在 CPython3.6 中似乎几乎相同(参见Gist
                    【解决方案17】:

                    它可以很容易地完成

                    for value in [var1,var2,var3]:
                         li.append("targetValue")
                    

                    【讨论】:

                      【解决方案18】:

                      用一个值测试多个变量:if 1 in {a,b,c}:

                      用一个变量测试多个值:if a in {1, 2, 3}:

                      【讨论】:

                        【解决方案19】:

                        看起来你正在构建某种凯撒密码。

                        一种更通用的方法是:

                        input_values = (0, 1, 3)
                        origo = ord('c')
                        [chr(val + origo) for val in inputs]
                        

                        产出

                        ['c', 'd', 'f']
                        

                        不确定这是否是您的代码的预期副作用,但您的输出顺序将始终排序。

                        如果这是你想要的,最后一行可以更改为:

                        sorted([chr(val + origo) for val in inputs])
                        

                        【讨论】:

                          【解决方案20】:

                          您可以使用字典:

                          x = 0
                          y = 1
                          z = 3
                          list=[]
                          dict = {0: 'c', 1: 'd', 2: 'e', 3: 'f'}
                          if x in dict:
                              list.append(dict[x])
                          else:
                              pass
                          
                          if y in dict:
                              list.append(dict[y])
                          else:
                              pass
                          if z in dict:
                              list.append(dict[z])
                          else:
                              pass
                          
                          print list
                          

                          【讨论】:

                          • 这可能会附加相同的内容,然后再添加一次。放?
                          【解决方案21】:

                          没有字典,试试这个解决方案:

                          x, y, z = 0, 1, 3    
                          offset = ord('c')
                          [chr(i + offset) for i in (x,y,z)]
                          

                          并给出:

                          ['c', 'd', 'f']
                          

                          【讨论】:

                            【解决方案22】:

                            这会帮助你。

                            def test_fun(val):
                                x = 0
                                y = 1
                                z = 2
                                myList = []
                                if val in (x, y, z) and val == 0:
                                    myList.append("C")
                                if val in (x, y, z) and val == 1:
                                    myList.append("D")
                                if val in (x, y, z) and val == 2:
                                    myList.append("E")
                            
                            test_fun(2);
                            

                            【讨论】:

                              【解决方案23】:

                              你可以联合这个

                              x = 0
                              y = 1
                              z = 3
                              

                              在一个变量中。

                              In [1]: xyz = (0,1,3,) 
                              In [2]: mylist = []
                              

                              改变我们的条件为:

                              In [3]: if 0 in xyz: 
                                  ...:     mylist.append("c") 
                                  ...: if 1 in xyz: 
                                  ...:     mylist.append("d") 
                                  ...: if 2 in xyz: 
                                  ...:     mylist.append("e") 
                                  ...: if 3 in xyz:  
                                  ...:     mylist.append("f") 
                              

                              输出:

                              In [21]: mylist                                                                                
                              Out[21]: ['c', 'd', 'f']
                              

                              【讨论】:

                                【解决方案24】:

                                你可以通过两种方式开发它

                                    def compareVariables(x,y,z):
                                        mylist = []
                                        if x==0 or y==0 or z==0:
                                            mylist.append('c')
                                        if  x==1 or y==1 or z==1:
                                            mylist.append('d')
                                        if  x==2 or y==2 or z==2:
                                            mylist.append('e')
                                        if  x==3 or y==3 or z==3:
                                            mylist.append('f')
                                        else:
                                            print("wrong input value!")
                                        print('first:',mylist)
                                
                                        compareVariables(1, 3, 2)
                                

                                或者

                                    def compareVariables(x,y,z):
                                        mylist = []
                                        if 0 in (x,y,z):
                                             mylist.append('c')
                                        if 1 in (x,y,z):
                                             mylist.append('d')
                                        if 2 in (x,y,z):
                                             mylist.append('e')
                                        if 3 in (x,y,z):
                                             mylist.append('f')
                                        else:
                                             print("wrong input value!")
                                        print('second:',mylist)
                                
                                        compareVariables(1, 3, 2)
                                

                                【讨论】:

                                  【解决方案25】:

                                  or 不像 explained by this answer 那样工作。

                                  虽然将使用通用答案

                                  if 0 in (x, y, z):
                                      ...
                                  

                                  这不是最好的具体的问题。在你的情况下你正在做反复试验, 因此值得编写一个这些变量:

                                  values = {x, y, z}
                                  
                                  if 0 in values:
                                      mylist.append("c")
                                  
                                  if 1 in values:
                                      mylist.append("d")
                                  

                                  我们可以使用字典来简化它——这将产生相同的值:

                                  mappings = {0: "c", 1: "d", ...}
                                  for k in mappings:
                                      if k in values:
                                          mylist.append(mappings[k])
                                  

                                  或者,如果 mylist 的顺序是任意的,您可以遍历价值观相反,并将它们与映射匹配:

                                  mappings = {0: "c", 1: "d", ...}
                                  for v in (x, y, z):
                                      if v in mappings:
                                          mylist.append(mappings[v])
                                  

                                  【讨论】:

                                    【解决方案26】:

                                    问题

                                    而用于测试多个值的模式

                                    >>> 2 in {1, 2, 3}
                                    True
                                    >>> 5 in {1, 2, 3}
                                    False
                                    

                                    可读性强,适用于多种情况,但有一个陷阱:

                                    >>> 0 in {True, False}
                                    True
                                    

                                    但是我们想要

                                    >>> (0 is True) or (0 is False)
                                    False
                                    

                                    解决方案

                                    前面表达式的一种概括是基于ytpillai 的回答:

                                    >>> any([0 is True, 0 is False])
                                    False
                                    

                                    可以写成

                                    >>> any(0 is item for item in (True, False))
                                    False
                                    

                                    虽然此表达式返回正确的结果,但它不如第一个表达式可读:-(

                                    【讨论】:

                                      【解决方案27】:

                                      这是另一种方法:

                                      x = 0
                                      y = 1
                                      z = 3
                                      mylist = []
                                      
                                      if any(i in [0] for i in[x,y,z]):
                                          mylist.append("c")
                                      if any(i in [1] for i in[x,y,z]):
                                          mylist.append("d")
                                      if any(i in [2] for i in[x,y,z]):
                                          mylist.append("e")
                                      if any(i in [3] for i in[x,y,z]):
                                          mylist.append("f")
                                      

                                      它是混合的列表理解任何关键词。

                                      【讨论】:

                                      • 为什么是 i in [0] 而不是 i == 0
                                      • 对于这个问题中的单个比较,您可以使用“==”,但如果您想要对多个变量进行多次比较,则可以使用“in”运算符,例如:if any(i in [0,5,4,9 ,7] 对于我在 [x,y,z] 中)
                                      【解决方案28】:

                                      没有 if 示例的用法:

                                      x,y,z = 0,1,3
                                      values = {0:"c",1:"d",2:"e",3:"f"} # => as if usage
                                      my_list = [values[i] for i in (x,y,z)]
                                      
                                      print(my_list)
                                      

                                      【讨论】:

                                        【解决方案29】:

                                        首先,对OR条件的更正:

                                        你需要说:

                                        if x == 0 or y == 0 or z == 0:
                                        

                                        原因是“或”将条件拆分为单独的逻辑部分。按照你原来的陈述方式,这些部分是:

                                        x
                                        y
                                        z == 0   // or 1, 2, 3 depending on the if statement
                                        

                                        最后一部分很好 --- 例如检查 z == 0 --- 但前两部分基本上只是说 if xif y。由于整数总是评估为True,除非它们为 0,这意味着当 xy 不等于 0 时,条件的第一部分始终为 True(在 y 的情况下始终为,因为你有 y = 1,导致你的整个条件(因为 OR 的工作方式)总是 True

                                        为避免这种情况,您需要确保条件的所有部分(OR 的每一侧)本身都有意义(您可以假装 OR 语句的另一侧不这样做)不存在)。这就是您可以确认您的 OR 条件是否正确定义的方式。

                                        您可以像这样单独编写语句:

                                        if x == 0
                                        if y == 0
                                        if z == 0
                                        

                                        这意味着使用 OR 关键字的正确合并将是:

                                        if x == 0 or y == 0 or z == 0
                                        

                                        二、如何解决问题:

                                        您基本上是想检查是否有任何变量与给定整数匹配,如果是,则为其分配一个在一对一映射中匹配它的字母。您想对特定的整数列表执行此操作,以便输出是字母列表。你会这样做:

                                        def func(x, y, z):
                                        
                                            result = []
                                        
                                            for integer, letter in zip([0, 1, 2, 3], ['c', 'd', 'e', 'f']):
                                                if x == integer or y == integer or z == integer:
                                                    result.append(letter)
                                                    
                                            return result
                                                
                                        

                                        同样,您可以使用 LIST COMPREHENSION 更快地获得相同的结果:

                                        def func(x, y, z):
                                        
                                            return [ 
                                                        letter 
                                                        for integer, letter in zip([0, 1, 2, 3], ['c', 'd', 'e', 'f'])
                                                        if x == integer or y == integer or z == integer
                                                   ]
                                            
                                            
                                        

                                        【讨论】:

                                          【解决方案30】:

                                          要针对单个值测试多个变量:

                                          将变量包装在一个集合对象中,例如{a, b, c}。 使用 in 运算符测试值是否存储在任何变量中。 如果值存储在至少一个变量中,则 in 运算符将返回 True。

                                          # ✅ test multiple variables against single value using tuple
                                          
                                          if 'a' in (a, b, c):
                                              print('value is stored in at least one of the variables')
                                          
                                          # ---------------------------------------------------------
                                          
                                          # ✅ test multiple variables against single value using tuple
                                          
                                          if 'a' in {a, b, c}:
                                              print('value is stored in at least one of the variables')
                                          
                                          # ---------------------------------------------------------
                                          
                                          
                                          # ✅ test multiple variables against single value (OR operator chaining)
                                          if a == 'a' or b == 'a' or c == 'a':
                                              print('value is stored in at least one of the variables')
                                          

                                          来源:https://bobbyhadz.com/blog/python-test-multiple-variables-against-single-value

                                          【讨论】:

                                            猜你喜欢
                                            • 2023-01-19
                                            • 2012-02-07
                                            • 2011-09-01
                                            • 2012-06-30
                                            • 2019-11-17
                                            相关资源
                                            最近更新 更多