How to test multiple variables against a value?












506















I'm trying to make a function that will compare multiple variables to an integer and output a string of three letters. I was wondering if there was a way to translate this into Python. So say:



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")


which would return a list of



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


Is something like this possible?










share|improve this question




















  • 3





    use 1 in (tuple)

    – Dante
    Dec 5 '17 at 21:49











  • When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

    – eddd
    Jun 4 '18 at 16:17













  • I did a summary post based on answers here: medium.com/codervlogger/…

    – Kanan Rahimov
    Feb 12 at 9:30
















506















I'm trying to make a function that will compare multiple variables to an integer and output a string of three letters. I was wondering if there was a way to translate this into Python. So say:



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")


which would return a list of



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


Is something like this possible?










share|improve this question




















  • 3





    use 1 in (tuple)

    – Dante
    Dec 5 '17 at 21:49











  • When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

    – eddd
    Jun 4 '18 at 16:17













  • I did a summary post based on answers here: medium.com/codervlogger/…

    – Kanan Rahimov
    Feb 12 at 9:30














506












506








506


94






I'm trying to make a function that will compare multiple variables to an integer and output a string of three letters. I was wondering if there was a way to translate this into Python. So say:



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")


which would return a list of



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


Is something like this possible?










share|improve this question
















I'm trying to make a function that will compare multiple variables to an integer and output a string of three letters. I was wondering if there was a way to translate this into Python. So say:



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")


which would return a list of



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


Is something like this possible?







python if-statement comparison match boolean-logic






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 4 at 8:55









Georgy

2,14741528




2,14741528










asked Feb 27 '13 at 12:26









user1877442user1877442

2,666295




2,666295








  • 3





    use 1 in (tuple)

    – Dante
    Dec 5 '17 at 21:49











  • When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

    – eddd
    Jun 4 '18 at 16:17













  • I did a summary post based on answers here: medium.com/codervlogger/…

    – Kanan Rahimov
    Feb 12 at 9:30














  • 3





    use 1 in (tuple)

    – Dante
    Dec 5 '17 at 21:49











  • When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

    – eddd
    Jun 4 '18 at 16:17













  • I did a summary post based on answers here: medium.com/codervlogger/…

    – Kanan Rahimov
    Feb 12 at 9:30








3




3





use 1 in (tuple)

– Dante
Dec 5 '17 at 21:49





use 1 in (tuple)

– Dante
Dec 5 '17 at 21:49













When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

– eddd
Jun 4 '18 at 16:17







When you want to evaluate a list of statements in a any/all manner you can use any/all functions. For example: all([1, 2, 3, 4, False]) will return False all([True, 1, 2, 3]) will return True any([False, 0, 0, False]) will return False any([False, 0, True, False]) will return True

– eddd
Jun 4 '18 at 16:17















I did a summary post based on answers here: medium.com/codervlogger/…

– Kanan Rahimov
Feb 12 at 9:30





I did a summary post based on answers here: medium.com/codervlogger/…

– Kanan Rahimov
Feb 12 at 9:30












20 Answers
20






active

oldest

votes


















676





+500









You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:



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


x and y are otherwise evaluated on their own (False if 0, True otherwise).



You can shorten that using a containment test against a tuple:



if 1 in (x, y, z):


or better still:



if 1 in {x, y, z}:


using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).



When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.



This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.



However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.



x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).



So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.



The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3 would fail for the same reasons. Use x == 1 or x == 2 or x == 3 or x in {1, 2, 3}.






share|improve this answer





















  • 89





    I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

    – SingleNegationElimination
    Oct 24 '13 at 15:27








  • 42





    @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

    – Martijn Pieters
    Oct 24 '13 at 15:29








  • 9





    @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

    – Martijn Pieters
    Oct 24 '13 at 15:37






  • 12





    @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

    – ShadowRanger
    Sep 4 '16 at 0:37






  • 4





    @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

    – Martijn Pieters
    Sep 4 '16 at 7:58



















79














Your problem is more easily addressed with a dictionary structure like:



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





share|improve this answer





















  • 17





    Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

    – aragaer
    Oct 24 '13 at 15:39






  • 9





    or map(lambda i: 'cdef'[i], [x, y, z])

    – dansalmo
    May 8 '14 at 14:36






  • 3





    @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

    – dansalmo
    Jul 24 '18 at 21:05











  • Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

    – LoneWanderer
    Mar 10 at 18:57



















51














Previous Solution: As stated by Martijn Pieters, the correct, and fastest, format is:



if 1 in {x, y, z}:


The one major issue that does not seem to be addressed is that you want your output list to include each letter after a true if statement.

Using only Martijn Pieters' advice you would now have:



if 0 in {x, y, z}:
Mylist.append("c")
elif 1 in {x, y, z}:
Mylist.append("d")
...


Problem: The first if statement would return true, and you would never get to the following elif statement. So your list would simply return:



["c"]


What you want is to have separate if statements so that python will read each statement whether the former were true or false. Such as:



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")
...


This will work, but 'if' you are comfortable using dictionaries (see what I did there), you can clean this up by making an initial dictionary mapping the numbers to the letters you want, then just using a 'for' loop:



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





share|improve this answer

































    36














    The direct way to write x or y or z == 0 is



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


    But I dont think, you like it. :)
    And this way is ugly.



    The other way (a better) is:



    0 in (x, y, z)


    BTW lots of ifs could be written as something like this



    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





    share|improve this answer





















    • 6





      In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

      – SethMMorton
      Feb 8 '14 at 20:57





















    26














    If you ARE very very lazy, you can put the values inside an array. Such as



    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


    You can also put the numbers and letters in a dictionary and do it, but this is probably a LOT more complicated than simply if statements. That's what you get for trying to be extra lazy :)



    One more thing, your



    if x or y or z == 0:


    will compile, but not in the way you want it to. When you simply put a variable in an if statement (example)



    if b


    the program will check if the variable is not null. Another way to write the above statement (which makes more sense) is



    if bool(b)


    Bool is an inbuilt function in python which basically does the command of verifying a boolean statement (If you don't know what that is, it is what you are trying to make in your if statement right now :))



    Another lazy way I found is :



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





    share|improve this answer

































      24














      To check if a value is contained within a set of variables you can use the inbuilt modules itertools and operator.



      For example:



      Imports:



      from itertools import repeat
      from operator import contains


      Declare variables:



      x = 0
      y = 1
      z = 3


      Create mapping of values (in the order you want to check):



      check_values = (0, 1, 3)


      Use itertools to allow repetition of the variables:



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


      Finally, use the map function to create an iterator:



      checker = map(contains, check_vars, check_values)


      Then, when checking for the values (in the original order), use next():



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


      etc...



      This has an advantage over the lambda x: x in (variables) because operator is an inbuilt module and is faster and more efficient than using lambda which has to create a custom in-place function.



      Another option for checking if there is a non-zero (or False) value in a list:



      not (x and y and z)


      Equivalent:



      not all((x, y, z))





      share|improve this answer


























      • This doesn't answer the OP's question. It only covers the first case in the provided example.

        – wallacer
        Jun 4 '14 at 17:39



















      22














      I think this will handle it better:



      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]


      Output:



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





      share|improve this answer

































        22














        Set is the good approach here, because it orders the variables, what seems to be your goal here. {z,y,x} is {0,1,3} whatever the order of the parameters.



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


        This way, the whole solution is O(n).






        share|improve this answer





















        • 4





          You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

          – Raniz
          Jun 10 '15 at 4:19



















        22














        If you want to use if, else statements following is another solution:



        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)





        share|improve this answer

































          22














          All of the excellent answers provided here concentrate on the specific requirement of the original poster and concentrate on the if 1 in {x,y,z} solution put forward by Martijn Pieters.

          What they ignore is the broader implication of the question:
          How do I test one variable against multiple values?

          The solution provided will not work for partial hits if using strings for example:

          Test if the string "Wild" is in multiple values



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


          or



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


          for this scenario it's easiest to convert to a string



          >>> [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


          It should be noted however, as mentioned by @codeforester, that word boundries are lost with this method, as in:



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


          the 3 letters rot do exist in combination in the list but not as an individual word. Testing for " rot " would fail but if one of the list items were "rot in hell", that would fail as well.

          The upshot being, be careful with your search criteria if using this method and be aware that it does have this limitation.






          share|improve this answer





















          • 3





            With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

            – codeforester
            Jun 21 '18 at 21:08






          • 2





            @codeforester Your point is a fair one and I'll mention it in the answer.

            – Rolf of Saxony
            Jun 22 '18 at 7:41



















          19














          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]





          share|improve this answer

































            19














            This code may be helpful



            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;





            share|improve this answer































              5














              One line solution:



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


              Or:



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





              share|improve this answer































                3














                You can try the method shown below. In this method, you will have the freedom to specify/input the number of variables that you wish to enter.



                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']





                share|improve this answer































                  2














                  It can be done easily as



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





                  share|improve this answer































                    1














                    The most mnemonic way of representing your pseudo-code in Python would be:



                    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")





                    share|improve this answer































                      1














                      Looks like you're building some kind of Caesar cipher.



                      A much more generalized approach is this:



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


                      outputs



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


                      Not sure if it's a desired side effect of your code, but the order of your output will always be sorted.



                      If this is what you want, the final line can be changed to:



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





                      share|improve this answer































                        1














                        To test multiple variables with one single value: if 1 in {a,b,c}:



                        To test multiple values with one variable: if a in {1, 2, 3}:






                        share|improve this answer































                          0














                          You can use dictionary :



                          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





                          share|improve this answer
























                          • This may append same more then once this. Set?

                            – Sergei
                            Feb 19 at 4:49



















                          0














                          Maybe you need direct formula for output bits set.



                          x=0 or y=0 or z=0 is equivalent to xyz = 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



                          lets map to bits: 'c':1 'd':0xb10 'e':0xb100 'f':0xb1000



                          relation of isc:



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



                          use math if formula 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))



                          ...



                          connect these formulas by following logic:



                          logic and is sum of squares of equations



                          logic or is product of equations



                          and you'll have total equation



                          express sum and you have total formula of sum



                          then sum&1 is c, sum&2 is d, sum&4 is e, sum&5 is f



                          after this you may form predefined array where index of string element would correspond to ready string.



                          array[sum] gives you the string.






                          share|improve this answer
























                            protected by Martijn Pieters Mar 8 '15 at 1:18



                            Thank you for your interest in this question.
                            Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                            Would you like to answer one of these unanswered questions instead?














                            20 Answers
                            20






                            active

                            oldest

                            votes








                            20 Answers
                            20






                            active

                            oldest

                            votes









                            active

                            oldest

                            votes






                            active

                            oldest

                            votes









                            676





                            +500









                            You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:



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


                            x and y are otherwise evaluated on their own (False if 0, True otherwise).



                            You can shorten that using a containment test against a tuple:



                            if 1 in (x, y, z):


                            or better still:



                            if 1 in {x, y, z}:


                            using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).



                            When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.



                            This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.



                            However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.



                            x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).



                            So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.



                            The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3 would fail for the same reasons. Use x == 1 or x == 2 or x == 3 or x in {1, 2, 3}.






                            share|improve this answer





















                            • 89





                              I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                              – SingleNegationElimination
                              Oct 24 '13 at 15:27








                            • 42





                              @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                              – Martijn Pieters
                              Oct 24 '13 at 15:29








                            • 9





                              @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                              – Martijn Pieters
                              Oct 24 '13 at 15:37






                            • 12





                              @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                              – ShadowRanger
                              Sep 4 '16 at 0:37






                            • 4





                              @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                              – Martijn Pieters
                              Sep 4 '16 at 7:58
















                            676





                            +500









                            You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:



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


                            x and y are otherwise evaluated on their own (False if 0, True otherwise).



                            You can shorten that using a containment test against a tuple:



                            if 1 in (x, y, z):


                            or better still:



                            if 1 in {x, y, z}:


                            using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).



                            When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.



                            This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.



                            However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.



                            x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).



                            So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.



                            The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3 would fail for the same reasons. Use x == 1 or x == 2 or x == 3 or x in {1, 2, 3}.






                            share|improve this answer





















                            • 89





                              I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                              – SingleNegationElimination
                              Oct 24 '13 at 15:27








                            • 42





                              @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                              – Martijn Pieters
                              Oct 24 '13 at 15:29








                            • 9





                              @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                              – Martijn Pieters
                              Oct 24 '13 at 15:37






                            • 12





                              @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                              – ShadowRanger
                              Sep 4 '16 at 0:37






                            • 4





                              @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                              – Martijn Pieters
                              Sep 4 '16 at 7:58














                            676





                            +500







                            676





                            +500



                            676




                            +500





                            You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:



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


                            x and y are otherwise evaluated on their own (False if 0, True otherwise).



                            You can shorten that using a containment test against a tuple:



                            if 1 in (x, y, z):


                            or better still:



                            if 1 in {x, y, z}:


                            using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).



                            When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.



                            This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.



                            However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.



                            x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).



                            So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.



                            The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3 would fail for the same reasons. Use x == 1 or x == 2 or x == 3 or x in {1, 2, 3}.






                            share|improve this answer















                            You misunderstand how boolean expressions work; they don't work like an English sentence and guess that you are talking about the same comparison for all names here. You are looking for:



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


                            x and y are otherwise evaluated on their own (False if 0, True otherwise).



                            You can shorten that using a containment test against a tuple:



                            if 1 in (x, y, z):


                            or better still:



                            if 1 in {x, y, z}:


                            using a set to take advantage of the constant-cost membership test (in takes a fixed amount of time whatever the left-hand operand is).



                            When you use or, python sees each side of the operator as separate expressions. The expression x or y == 1 is treated as first a boolean test for x, then if that is False, the expression y == 1 is tested.



                            This is due to operator precedence. The or operator has a lower precedence than the == test, so the latter is evaluated first.



                            However, even if this were not the case, and the expression x or y or z == 1 was actually interpreted as (x or y or z) == 1 instead, this would still not do what you expect it to do.



                            x or y or z would evaluate to the first argument that is 'truthy', e.g. not False, numeric 0 or empty (see boolean expressions for details on what Python considers false in a boolean context).



                            So for the values x = 2; y = 1; z = 0, x or y or z would resolve to 2, because that is the first true-like value in the arguments. Then 2 == 1 would be False, even though y == 1 would be True.



                            The same would apply to the inverse; testing multiple values against a single variable; x == 1 or 2 or 3 would fail for the same reasons. Use x == 1 or x == 2 or x == 3 or x in {1, 2, 3}.







                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited Mar 12 '18 at 19:56

























                            answered Feb 27 '13 at 12:27









                            Martijn PietersMartijn Pieters

                            719k14025112320




                            719k14025112320








                            • 89





                              I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                              – SingleNegationElimination
                              Oct 24 '13 at 15:27








                            • 42





                              @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                              – Martijn Pieters
                              Oct 24 '13 at 15:29








                            • 9





                              @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                              – Martijn Pieters
                              Oct 24 '13 at 15:37






                            • 12





                              @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                              – ShadowRanger
                              Sep 4 '16 at 0:37






                            • 4





                              @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                              – Martijn Pieters
                              Sep 4 '16 at 7:58














                            • 89





                              I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                              – SingleNegationElimination
                              Oct 24 '13 at 15:27








                            • 42





                              @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                              – Martijn Pieters
                              Oct 24 '13 at 15:29








                            • 9





                              @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                              – Martijn Pieters
                              Oct 24 '13 at 15:37






                            • 12





                              @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                              – ShadowRanger
                              Sep 4 '16 at 0:37






                            • 4





                              @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                              – Martijn Pieters
                              Sep 4 '16 at 7:58








                            89




                            89





                            I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                            – SingleNegationElimination
                            Oct 24 '13 at 15:27







                            I wouldn't be so quick to go for the set version. Tuple's are very cheap to create and iterate over. On my machine at least, tuples are faster than sets so long as the size of the tuple is around 4-8 elements. If you have to scan more than that, use a set, but if you are looking for an item out of 2-4 possibilities, a tuple is still faster! If you can arrange for the most likely case to be first in the tuple, the win is even bigger: (my test: timeit.timeit('0 in {seq}'.format(seq=tuple(range(9, -1, -1)))))

                            – SingleNegationElimination
                            Oct 24 '13 at 15:27






                            42




                            42





                            @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                            – Martijn Pieters
                            Oct 24 '13 at 15:29







                            @dequestarmappartialsetattr: In Python 3.3 and up, the set is stored as a constant, bypassing the creation time altogether, eliminating the creation time. Tuples can be cheap to create as Python caches a bundle of them to avoid memory churn, making that the biggest difference with sets here.

                            – Martijn Pieters
                            Oct 24 '13 at 15:29






                            9




                            9





                            @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                            – Martijn Pieters
                            Oct 24 '13 at 15:37





                            @dequestarmappartialsetattr: If you time just the membership test, for integers sets and tuples are equally fast for the ideal scenario; matching the first element. After that tuples lose out to sets.

                            – Martijn Pieters
                            Oct 24 '13 at 15:37




                            12




                            12





                            @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                            – ShadowRanger
                            Sep 4 '16 at 0:37





                            @MartijnPieters: Using the set literal notation for this test isn't a savings unless the contents of the set literal are also literals, right? if 1 in {x, y, z}: can't cache the set, because x, y and z could change, so either solution needs to build a tuple or set from scratch, and I suspect whatever lookup savings you might get when checking for membership would be swamped by greater set creation time.

                            – ShadowRanger
                            Sep 4 '16 at 0:37




                            4




                            4





                            @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                            – Martijn Pieters
                            Sep 4 '16 at 7:58





                            @ShadowRanger: yes, peephole optimisation (be it for in [...] or in {...}) only works if the contents of the list or set are immutable literals too.

                            – Martijn Pieters
                            Sep 4 '16 at 7:58













                            79














                            Your problem is more easily addressed with a dictionary structure like:



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





                            share|improve this answer





















                            • 17





                              Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                              – aragaer
                              Oct 24 '13 at 15:39






                            • 9





                              or map(lambda i: 'cdef'[i], [x, y, z])

                              – dansalmo
                              May 8 '14 at 14:36






                            • 3





                              @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                              – dansalmo
                              Jul 24 '18 at 21:05











                            • Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                              – LoneWanderer
                              Mar 10 at 18:57
















                            79














                            Your problem is more easily addressed with a dictionary structure like:



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





                            share|improve this answer





















                            • 17





                              Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                              – aragaer
                              Oct 24 '13 at 15:39






                            • 9





                              or map(lambda i: 'cdef'[i], [x, y, z])

                              – dansalmo
                              May 8 '14 at 14:36






                            • 3





                              @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                              – dansalmo
                              Jul 24 '18 at 21:05











                            • Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                              – LoneWanderer
                              Mar 10 at 18:57














                            79












                            79








                            79







                            Your problem is more easily addressed with a dictionary structure like:



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





                            share|improve this answer















                            Your problem is more easily addressed with a dictionary structure like:



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






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited Oct 25 '17 at 14:45









                            River

                            5,54483754




                            5,54483754










                            answered Jul 11 '13 at 21:56









                            dansalmodansalmo

                            8,37744046




                            8,37744046








                            • 17





                              Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                              – aragaer
                              Oct 24 '13 at 15:39






                            • 9





                              or map(lambda i: 'cdef'[i], [x, y, z])

                              – dansalmo
                              May 8 '14 at 14:36






                            • 3





                              @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                              – dansalmo
                              Jul 24 '18 at 21:05











                            • Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                              – LoneWanderer
                              Mar 10 at 18:57














                            • 17





                              Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                              – aragaer
                              Oct 24 '13 at 15:39






                            • 9





                              or map(lambda i: 'cdef'[i], [x, y, z])

                              – dansalmo
                              May 8 '14 at 14:36






                            • 3





                              @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                              – dansalmo
                              Jul 24 '18 at 21:05











                            • Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                              – LoneWanderer
                              Mar 10 at 18:57








                            17




                            17





                            Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                            – aragaer
                            Oct 24 '13 at 15:39





                            Or even d = "cdef" which leads to MyList = ["cdef"[k] for k in [x, y, z]]

                            – aragaer
                            Oct 24 '13 at 15:39




                            9




                            9





                            or map(lambda i: 'cdef'[i], [x, y, z])

                            – dansalmo
                            May 8 '14 at 14:36





                            or map(lambda i: 'cdef'[i], [x, y, z])

                            – dansalmo
                            May 8 '14 at 14:36




                            3




                            3





                            @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                            – dansalmo
                            Jul 24 '18 at 21:05





                            @MJM the output order is not determined by the dict, it is determined by the order of the list [x, y, z]

                            – dansalmo
                            Jul 24 '18 at 21:05













                            Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                            – LoneWanderer
                            Mar 10 at 18:57





                            Aside from the list comprehension which I'm not yet fully accustomed to, most of us had the same reflex: build that dict !

                            – LoneWanderer
                            Mar 10 at 18:57











                            51














                            Previous Solution: As stated by Martijn Pieters, the correct, and fastest, format is:



                            if 1 in {x, y, z}:


                            The one major issue that does not seem to be addressed is that you want your output list to include each letter after a true if statement.

                            Using only Martijn Pieters' advice you would now have:



                            if 0 in {x, y, z}:
                            Mylist.append("c")
                            elif 1 in {x, y, z}:
                            Mylist.append("d")
                            ...


                            Problem: The first if statement would return true, and you would never get to the following elif statement. So your list would simply return:



                            ["c"]


                            What you want is to have separate if statements so that python will read each statement whether the former were true or false. Such as:



                            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")
                            ...


                            This will work, but 'if' you are comfortable using dictionaries (see what I did there), you can clean this up by making an initial dictionary mapping the numbers to the letters you want, then just using a 'for' loop:



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





                            share|improve this answer






























                              51














                              Previous Solution: As stated by Martijn Pieters, the correct, and fastest, format is:



                              if 1 in {x, y, z}:


                              The one major issue that does not seem to be addressed is that you want your output list to include each letter after a true if statement.

                              Using only Martijn Pieters' advice you would now have:



                              if 0 in {x, y, z}:
                              Mylist.append("c")
                              elif 1 in {x, y, z}:
                              Mylist.append("d")
                              ...


                              Problem: The first if statement would return true, and you would never get to the following elif statement. So your list would simply return:



                              ["c"]


                              What you want is to have separate if statements so that python will read each statement whether the former were true or false. Such as:



                              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")
                              ...


                              This will work, but 'if' you are comfortable using dictionaries (see what I did there), you can clean this up by making an initial dictionary mapping the numbers to the letters you want, then just using a 'for' loop:



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





                              share|improve this answer




























                                51












                                51








                                51







                                Previous Solution: As stated by Martijn Pieters, the correct, and fastest, format is:



                                if 1 in {x, y, z}:


                                The one major issue that does not seem to be addressed is that you want your output list to include each letter after a true if statement.

                                Using only Martijn Pieters' advice you would now have:



                                if 0 in {x, y, z}:
                                Mylist.append("c")
                                elif 1 in {x, y, z}:
                                Mylist.append("d")
                                ...


                                Problem: The first if statement would return true, and you would never get to the following elif statement. So your list would simply return:



                                ["c"]


                                What you want is to have separate if statements so that python will read each statement whether the former were true or false. Such as:



                                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")
                                ...


                                This will work, but 'if' you are comfortable using dictionaries (see what I did there), you can clean this up by making an initial dictionary mapping the numbers to the letters you want, then just using a 'for' loop:



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





                                share|improve this answer















                                Previous Solution: As stated by Martijn Pieters, the correct, and fastest, format is:



                                if 1 in {x, y, z}:


                                The one major issue that does not seem to be addressed is that you want your output list to include each letter after a true if statement.

                                Using only Martijn Pieters' advice you would now have:



                                if 0 in {x, y, z}:
                                Mylist.append("c")
                                elif 1 in {x, y, z}:
                                Mylist.append("d")
                                ...


                                Problem: The first if statement would return true, and you would never get to the following elif statement. So your list would simply return:



                                ["c"]


                                What you want is to have separate if statements so that python will read each statement whether the former were true or false. Such as:



                                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")
                                ...


                                This will work, but 'if' you are comfortable using dictionaries (see what I did there), you can clean this up by making an initial dictionary mapping the numbers to the letters you want, then just using a 'for' loop:



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






                                share|improve this answer














                                share|improve this answer



                                share|improve this answer








                                edited Aug 19 '15 at 15:18

























                                answered Aug 19 '15 at 2:34









                                ThatGuyRussellThatGuyRussell

                                938617




                                938617























                                    36














                                    The direct way to write x or y or z == 0 is



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


                                    But I dont think, you like it. :)
                                    And this way is ugly.



                                    The other way (a better) is:



                                    0 in (x, y, z)


                                    BTW lots of ifs could be written as something like this



                                    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





                                    share|improve this answer





















                                    • 6





                                      In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                      – SethMMorton
                                      Feb 8 '14 at 20:57


















                                    36














                                    The direct way to write x or y or z == 0 is



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


                                    But I dont think, you like it. :)
                                    And this way is ugly.



                                    The other way (a better) is:



                                    0 in (x, y, z)


                                    BTW lots of ifs could be written as something like this



                                    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





                                    share|improve this answer





















                                    • 6





                                      In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                      – SethMMorton
                                      Feb 8 '14 at 20:57
















                                    36












                                    36








                                    36







                                    The direct way to write x or y or z == 0 is



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


                                    But I dont think, you like it. :)
                                    And this way is ugly.



                                    The other way (a better) is:



                                    0 in (x, y, z)


                                    BTW lots of ifs could be written as something like this



                                    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





                                    share|improve this answer















                                    The direct way to write x or y or z == 0 is



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


                                    But I dont think, you like it. :)
                                    And this way is ugly.



                                    The other way (a better) is:



                                    0 in (x, y, z)


                                    BTW lots of ifs could be written as something like this



                                    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






                                    share|improve this answer














                                    share|improve this answer



                                    share|improve this answer








                                    edited Jul 11 '13 at 21:24

























                                    answered Jul 11 '13 at 21:16









                                    akaRemakaRem

                                    3,22732235




                                    3,22732235








                                    • 6





                                      In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                      – SethMMorton
                                      Feb 8 '14 at 20:57
















                                    • 6





                                      In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                      – SethMMorton
                                      Feb 8 '14 at 20:57










                                    6




                                    6





                                    In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                    – SethMMorton
                                    Feb 8 '14 at 20:57







                                    In your example of the dict instead of a key, you will get errors because the return value of .append is None, and calling None gives an AttributeError. In general I agree with this method, though.

                                    – SethMMorton
                                    Feb 8 '14 at 20:57













                                    26














                                    If you ARE very very lazy, you can put the values inside an array. Such as



                                    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


                                    You can also put the numbers and letters in a dictionary and do it, but this is probably a LOT more complicated than simply if statements. That's what you get for trying to be extra lazy :)



                                    One more thing, your



                                    if x or y or z == 0:


                                    will compile, but not in the way you want it to. When you simply put a variable in an if statement (example)



                                    if b


                                    the program will check if the variable is not null. Another way to write the above statement (which makes more sense) is



                                    if bool(b)


                                    Bool is an inbuilt function in python which basically does the command of verifying a boolean statement (If you don't know what that is, it is what you are trying to make in your if statement right now :))



                                    Another lazy way I found is :



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





                                    share|improve this answer






























                                      26














                                      If you ARE very very lazy, you can put the values inside an array. Such as



                                      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


                                      You can also put the numbers and letters in a dictionary and do it, but this is probably a LOT more complicated than simply if statements. That's what you get for trying to be extra lazy :)



                                      One more thing, your



                                      if x or y or z == 0:


                                      will compile, but not in the way you want it to. When you simply put a variable in an if statement (example)



                                      if b


                                      the program will check if the variable is not null. Another way to write the above statement (which makes more sense) is



                                      if bool(b)


                                      Bool is an inbuilt function in python which basically does the command of verifying a boolean statement (If you don't know what that is, it is what you are trying to make in your if statement right now :))



                                      Another lazy way I found is :



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





                                      share|improve this answer




























                                        26












                                        26








                                        26







                                        If you ARE very very lazy, you can put the values inside an array. Such as



                                        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


                                        You can also put the numbers and letters in a dictionary and do it, but this is probably a LOT more complicated than simply if statements. That's what you get for trying to be extra lazy :)



                                        One more thing, your



                                        if x or y or z == 0:


                                        will compile, but not in the way you want it to. When you simply put a variable in an if statement (example)



                                        if b


                                        the program will check if the variable is not null. Another way to write the above statement (which makes more sense) is



                                        if bool(b)


                                        Bool is an inbuilt function in python which basically does the command of verifying a boolean statement (If you don't know what that is, it is what you are trying to make in your if statement right now :))



                                        Another lazy way I found is :



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





                                        share|improve this answer















                                        If you ARE very very lazy, you can put the values inside an array. Such as



                                        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


                                        You can also put the numbers and letters in a dictionary and do it, but this is probably a LOT more complicated than simply if statements. That's what you get for trying to be extra lazy :)



                                        One more thing, your



                                        if x or y or z == 0:


                                        will compile, but not in the way you want it to. When you simply put a variable in an if statement (example)



                                        if b


                                        the program will check if the variable is not null. Another way to write the above statement (which makes more sense) is



                                        if bool(b)


                                        Bool is an inbuilt function in python which basically does the command of verifying a boolean statement (If you don't know what that is, it is what you are trying to make in your if statement right now :))



                                        Another lazy way I found is :



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






                                        share|improve this answer














                                        share|improve this answer



                                        share|improve this answer








                                        edited Aug 13 '15 at 18:06

























                                        answered May 25 '15 at 3:53









                                        ytpillaiytpillai

                                        2,2711834




                                        2,2711834























                                            24














                                            To check if a value is contained within a set of variables you can use the inbuilt modules itertools and operator.



                                            For example:



                                            Imports:



                                            from itertools import repeat
                                            from operator import contains


                                            Declare variables:



                                            x = 0
                                            y = 1
                                            z = 3


                                            Create mapping of values (in the order you want to check):



                                            check_values = (0, 1, 3)


                                            Use itertools to allow repetition of the variables:



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


                                            Finally, use the map function to create an iterator:



                                            checker = map(contains, check_vars, check_values)


                                            Then, when checking for the values (in the original order), use next():



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


                                            etc...



                                            This has an advantage over the lambda x: x in (variables) because operator is an inbuilt module and is faster and more efficient than using lambda which has to create a custom in-place function.



                                            Another option for checking if there is a non-zero (or False) value in a list:



                                            not (x and y and z)


                                            Equivalent:



                                            not all((x, y, z))





                                            share|improve this answer


























                                            • This doesn't answer the OP's question. It only covers the first case in the provided example.

                                              – wallacer
                                              Jun 4 '14 at 17:39
















                                            24














                                            To check if a value is contained within a set of variables you can use the inbuilt modules itertools and operator.



                                            For example:



                                            Imports:



                                            from itertools import repeat
                                            from operator import contains


                                            Declare variables:



                                            x = 0
                                            y = 1
                                            z = 3


                                            Create mapping of values (in the order you want to check):



                                            check_values = (0, 1, 3)


                                            Use itertools to allow repetition of the variables:



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


                                            Finally, use the map function to create an iterator:



                                            checker = map(contains, check_vars, check_values)


                                            Then, when checking for the values (in the original order), use next():



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


                                            etc...



                                            This has an advantage over the lambda x: x in (variables) because operator is an inbuilt module and is faster and more efficient than using lambda which has to create a custom in-place function.



                                            Another option for checking if there is a non-zero (or False) value in a list:



                                            not (x and y and z)


                                            Equivalent:



                                            not all((x, y, z))





                                            share|improve this answer


























                                            • This doesn't answer the OP's question. It only covers the first case in the provided example.

                                              – wallacer
                                              Jun 4 '14 at 17:39














                                            24












                                            24








                                            24







                                            To check if a value is contained within a set of variables you can use the inbuilt modules itertools and operator.



                                            For example:



                                            Imports:



                                            from itertools import repeat
                                            from operator import contains


                                            Declare variables:



                                            x = 0
                                            y = 1
                                            z = 3


                                            Create mapping of values (in the order you want to check):



                                            check_values = (0, 1, 3)


                                            Use itertools to allow repetition of the variables:



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


                                            Finally, use the map function to create an iterator:



                                            checker = map(contains, check_vars, check_values)


                                            Then, when checking for the values (in the original order), use next():



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


                                            etc...



                                            This has an advantage over the lambda x: x in (variables) because operator is an inbuilt module and is faster and more efficient than using lambda which has to create a custom in-place function.



                                            Another option for checking if there is a non-zero (or False) value in a list:



                                            not (x and y and z)


                                            Equivalent:



                                            not all((x, y, z))





                                            share|improve this answer















                                            To check if a value is contained within a set of variables you can use the inbuilt modules itertools and operator.



                                            For example:



                                            Imports:



                                            from itertools import repeat
                                            from operator import contains


                                            Declare variables:



                                            x = 0
                                            y = 1
                                            z = 3


                                            Create mapping of values (in the order you want to check):



                                            check_values = (0, 1, 3)


                                            Use itertools to allow repetition of the variables:



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


                                            Finally, use the map function to create an iterator:



                                            checker = map(contains, check_vars, check_values)


                                            Then, when checking for the values (in the original order), use next():



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


                                            etc...



                                            This has an advantage over the lambda x: x in (variables) because operator is an inbuilt module and is faster and more efficient than using lambda which has to create a custom in-place function.



                                            Another option for checking if there is a non-zero (or False) value in a list:



                                            not (x and y and z)


                                            Equivalent:



                                            not all((x, y, z))






                                            share|improve this answer














                                            share|improve this answer



                                            share|improve this answer








                                            edited Jun 5 '14 at 11:31

























                                            answered Jun 4 '14 at 17:09









                                            GuiltyDolphinGuiltyDolphin

                                            6201610




                                            6201610













                                            • This doesn't answer the OP's question. It only covers the first case in the provided example.

                                              – wallacer
                                              Jun 4 '14 at 17:39



















                                            • This doesn't answer the OP's question. It only covers the first case in the provided example.

                                              – wallacer
                                              Jun 4 '14 at 17:39

















                                            This doesn't answer the OP's question. It only covers the first case in the provided example.

                                            – wallacer
                                            Jun 4 '14 at 17:39





                                            This doesn't answer the OP's question. It only covers the first case in the provided example.

                                            – wallacer
                                            Jun 4 '14 at 17:39











                                            22














                                            I think this will handle it better:



                                            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]


                                            Output:



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





                                            share|improve this answer






























                                              22














                                              I think this will handle it better:



                                              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]


                                              Output:



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





                                              share|improve this answer




























                                                22












                                                22








                                                22







                                                I think this will handle it better:



                                                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]


                                                Output:



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





                                                share|improve this answer















                                                I think this will handle it better:



                                                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]


                                                Output:



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






                                                share|improve this answer














                                                share|improve this answer



                                                share|improve this answer








                                                edited Feb 10 '15 at 14:58









                                                shuttle87

                                                11.4k659100




                                                11.4k659100










                                                answered Jan 13 '15 at 12:10









                                                Bhargav BodaBhargav Boda

                                                23123




                                                23123























                                                    22














                                                    Set is the good approach here, because it orders the variables, what seems to be your goal here. {z,y,x} is {0,1,3} whatever the order of the parameters.



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


                                                    This way, the whole solution is O(n).






                                                    share|improve this answer





















                                                    • 4





                                                      You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                      – Raniz
                                                      Jun 10 '15 at 4:19
















                                                    22














                                                    Set is the good approach here, because it orders the variables, what seems to be your goal here. {z,y,x} is {0,1,3} whatever the order of the parameters.



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


                                                    This way, the whole solution is O(n).






                                                    share|improve this answer





















                                                    • 4





                                                      You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                      – Raniz
                                                      Jun 10 '15 at 4:19














                                                    22












                                                    22








                                                    22







                                                    Set is the good approach here, because it orders the variables, what seems to be your goal here. {z,y,x} is {0,1,3} whatever the order of the parameters.



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


                                                    This way, the whole solution is O(n).






                                                    share|improve this answer















                                                    Set is the good approach here, because it orders the variables, what seems to be your goal here. {z,y,x} is {0,1,3} whatever the order of the parameters.



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


                                                    This way, the whole solution is O(n).







                                                    share|improve this answer














                                                    share|improve this answer



                                                    share|improve this answer








                                                    edited Apr 1 '18 at 13:10

























                                                    answered Jun 9 '15 at 20:46









                                                    B. M.B. M.

                                                    13.4k12037




                                                    13.4k12037








                                                    • 4





                                                      You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                      – Raniz
                                                      Jun 10 '15 at 4:19














                                                    • 4





                                                      You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                      – Raniz
                                                      Jun 10 '15 at 4:19








                                                    4




                                                    4





                                                    You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                    – Raniz
                                                    Jun 10 '15 at 4:19





                                                    You should add a description of what your code accomplishes and how it does it. Short answers using only code is discouraged

                                                    – Raniz
                                                    Jun 10 '15 at 4:19











                                                    22














                                                    If you want to use if, else statements following is another solution:



                                                    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)





                                                    share|improve this answer






























                                                      22














                                                      If you want to use if, else statements following is another solution:



                                                      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)





                                                      share|improve this answer




























                                                        22












                                                        22








                                                        22







                                                        If you want to use if, else statements following is another solution:



                                                        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)





                                                        share|improve this answer















                                                        If you want to use if, else statements following is another solution:



                                                        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)






                                                        share|improve this answer














                                                        share|improve this answer



                                                        share|improve this answer








                                                        edited Sep 4 '18 at 3:53









                                                        Vishvajit Pathak

                                                        1,024913




                                                        1,024913










                                                        answered Apr 10 '15 at 3:29









                                                        paarsapaarsa

                                                        33125




                                                        33125























                                                            22














                                                            All of the excellent answers provided here concentrate on the specific requirement of the original poster and concentrate on the if 1 in {x,y,z} solution put forward by Martijn Pieters.

                                                            What they ignore is the broader implication of the question:
                                                            How do I test one variable against multiple values?

                                                            The solution provided will not work for partial hits if using strings for example:

                                                            Test if the string "Wild" is in multiple values



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


                                                            or



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


                                                            for this scenario it's easiest to convert to a string



                                                            >>> [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


                                                            It should be noted however, as mentioned by @codeforester, that word boundries are lost with this method, as in:



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


                                                            the 3 letters rot do exist in combination in the list but not as an individual word. Testing for " rot " would fail but if one of the list items were "rot in hell", that would fail as well.

                                                            The upshot being, be careful with your search criteria if using this method and be aware that it does have this limitation.






                                                            share|improve this answer





















                                                            • 3





                                                              With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                              – codeforester
                                                              Jun 21 '18 at 21:08






                                                            • 2





                                                              @codeforester Your point is a fair one and I'll mention it in the answer.

                                                              – Rolf of Saxony
                                                              Jun 22 '18 at 7:41
















                                                            22














                                                            All of the excellent answers provided here concentrate on the specific requirement of the original poster and concentrate on the if 1 in {x,y,z} solution put forward by Martijn Pieters.

                                                            What they ignore is the broader implication of the question:
                                                            How do I test one variable against multiple values?

                                                            The solution provided will not work for partial hits if using strings for example:

                                                            Test if the string "Wild" is in multiple values



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


                                                            or



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


                                                            for this scenario it's easiest to convert to a string



                                                            >>> [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


                                                            It should be noted however, as mentioned by @codeforester, that word boundries are lost with this method, as in:



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


                                                            the 3 letters rot do exist in combination in the list but not as an individual word. Testing for " rot " would fail but if one of the list items were "rot in hell", that would fail as well.

                                                            The upshot being, be careful with your search criteria if using this method and be aware that it does have this limitation.






                                                            share|improve this answer





















                                                            • 3





                                                              With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                              – codeforester
                                                              Jun 21 '18 at 21:08






                                                            • 2





                                                              @codeforester Your point is a fair one and I'll mention it in the answer.

                                                              – Rolf of Saxony
                                                              Jun 22 '18 at 7:41














                                                            22












                                                            22








                                                            22







                                                            All of the excellent answers provided here concentrate on the specific requirement of the original poster and concentrate on the if 1 in {x,y,z} solution put forward by Martijn Pieters.

                                                            What they ignore is the broader implication of the question:
                                                            How do I test one variable against multiple values?

                                                            The solution provided will not work for partial hits if using strings for example:

                                                            Test if the string "Wild" is in multiple values



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


                                                            or



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


                                                            for this scenario it's easiest to convert to a string



                                                            >>> [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


                                                            It should be noted however, as mentioned by @codeforester, that word boundries are lost with this method, as in:



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


                                                            the 3 letters rot do exist in combination in the list but not as an individual word. Testing for " rot " would fail but if one of the list items were "rot in hell", that would fail as well.

                                                            The upshot being, be careful with your search criteria if using this method and be aware that it does have this limitation.






                                                            share|improve this answer















                                                            All of the excellent answers provided here concentrate on the specific requirement of the original poster and concentrate on the if 1 in {x,y,z} solution put forward by Martijn Pieters.

                                                            What they ignore is the broader implication of the question:
                                                            How do I test one variable against multiple values?

                                                            The solution provided will not work for partial hits if using strings for example:

                                                            Test if the string "Wild" is in multiple values



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


                                                            or



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


                                                            for this scenario it's easiest to convert to a string



                                                            >>> [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


                                                            It should be noted however, as mentioned by @codeforester, that word boundries are lost with this method, as in:



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


                                                            the 3 letters rot do exist in combination in the list but not as an individual word. Testing for " rot " would fail but if one of the list items were "rot in hell", that would fail as well.

                                                            The upshot being, be careful with your search criteria if using this method and be aware that it does have this limitation.







                                                            share|improve this answer














                                                            share|improve this answer



                                                            share|improve this answer








                                                            edited Sep 4 '18 at 11:59









                                                            Vishvajit Pathak

                                                            1,024913




                                                            1,024913










                                                            answered Sep 10 '16 at 15:44









                                                            Rolf of SaxonyRolf of Saxony

                                                            9,25021738




                                                            9,25021738








                                                            • 3





                                                              With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                              – codeforester
                                                              Jun 21 '18 at 21:08






                                                            • 2





                                                              @codeforester Your point is a fair one and I'll mention it in the answer.

                                                              – Rolf of Saxony
                                                              Jun 22 '18 at 7:41














                                                            • 3





                                                              With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                              – codeforester
                                                              Jun 21 '18 at 21:08






                                                            • 2





                                                              @codeforester Your point is a fair one and I'll mention it in the answer.

                                                              – Rolf of Saxony
                                                              Jun 22 '18 at 7:41








                                                            3




                                                            3





                                                            With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                            – codeforester
                                                            Jun 21 '18 at 21:08





                                                            With the "convert to a string" approach, we lose the word boundaries and the in check may not do the right thing.

                                                            – codeforester
                                                            Jun 21 '18 at 21:08




                                                            2




                                                            2





                                                            @codeforester Your point is a fair one and I'll mention it in the answer.

                                                            – Rolf of Saxony
                                                            Jun 22 '18 at 7:41





                                                            @codeforester Your point is a fair one and I'll mention it in the answer.

                                                            – Rolf of Saxony
                                                            Jun 22 '18 at 7:41











                                                            19














                                                            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]





                                                            share|improve this answer






























                                                              19














                                                              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]





                                                              share|improve this answer




























                                                                19












                                                                19








                                                                19







                                                                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]





                                                                share|improve this answer















                                                                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]






                                                                share|improve this answer














                                                                share|improve this answer



                                                                share|improve this answer








                                                                edited Feb 27 '15 at 1:48

























                                                                answered Feb 27 '15 at 1:31









                                                                Saksham VarmaSaksham Varma

                                                                1,774714




                                                                1,774714























                                                                    19














                                                                    This code may be helpful



                                                                    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;





                                                                    share|improve this answer




























                                                                      19














                                                                      This code may be helpful



                                                                      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;





                                                                      share|improve this answer


























                                                                        19












                                                                        19








                                                                        19







                                                                        This code may be helpful



                                                                        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;





                                                                        share|improve this answer













                                                                        This code may be helpful



                                                                        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;






                                                                        share|improve this answer












                                                                        share|improve this answer



                                                                        share|improve this answer










                                                                        answered Jun 29 '15 at 7:03









                                                                        michael zxc858michael zxc858

                                                                        20537




                                                                        20537























                                                                            5














                                                                            One line solution:



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


                                                                            Or:



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





                                                                            share|improve this answer




























                                                                              5














                                                                              One line solution:



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


                                                                              Or:



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





                                                                              share|improve this answer


























                                                                                5












                                                                                5








                                                                                5







                                                                                One line solution:



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


                                                                                Or:



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





                                                                                share|improve this answer













                                                                                One line solution:



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


                                                                                Or:



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






                                                                                share|improve this answer












                                                                                share|improve this answer



                                                                                share|improve this answer










                                                                                answered Jun 5 '17 at 6:50









                                                                                Vinayak KaniyarakkalVinayak Kaniyarakkal

                                                                                7621220




                                                                                7621220























                                                                                    3














                                                                                    You can try the method shown below. In this method, you will have the freedom to specify/input the number of variables that you wish to enter.



                                                                                    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']





                                                                                    share|improve this answer




























                                                                                      3














                                                                                      You can try the method shown below. In this method, you will have the freedom to specify/input the number of variables that you wish to enter.



                                                                                      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']





                                                                                      share|improve this answer


























                                                                                        3












                                                                                        3








                                                                                        3







                                                                                        You can try the method shown below. In this method, you will have the freedom to specify/input the number of variables that you wish to enter.



                                                                                        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']





                                                                                        share|improve this answer













                                                                                        You can try the method shown below. In this method, you will have the freedom to specify/input the number of variables that you wish to enter.



                                                                                        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']






                                                                                        share|improve this answer












                                                                                        share|improve this answer



                                                                                        share|improve this answer










                                                                                        answered Dec 3 '18 at 5:13









                                                                                        Siddharth SatpathySiddharth Satpathy

                                                                                        5841617




                                                                                        5841617























                                                                                            2














                                                                                            It can be done easily as



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





                                                                                            share|improve this answer




























                                                                                              2














                                                                                              It can be done easily as



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





                                                                                              share|improve this answer


























                                                                                                2












                                                                                                2








                                                                                                2







                                                                                                It can be done easily as



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





                                                                                                share|improve this answer













                                                                                                It can be done easily as



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






                                                                                                share|improve this answer












                                                                                                share|improve this answer



                                                                                                share|improve this answer










                                                                                                answered Nov 6 '18 at 14:26









                                                                                                SeenivasanSeenivasan

                                                                                                7741618




                                                                                                7741618























                                                                                                    1














                                                                                                    The most mnemonic way of representing your pseudo-code in Python would be:



                                                                                                    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")





                                                                                                    share|improve this answer




























                                                                                                      1














                                                                                                      The most mnemonic way of representing your pseudo-code in Python would be:



                                                                                                      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")





                                                                                                      share|improve this answer


























                                                                                                        1












                                                                                                        1








                                                                                                        1







                                                                                                        The most mnemonic way of representing your pseudo-code in Python would be:



                                                                                                        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")





                                                                                                        share|improve this answer













                                                                                                        The most mnemonic way of representing your pseudo-code in Python would be:



                                                                                                        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")






                                                                                                        share|improve this answer












                                                                                                        share|improve this answer



                                                                                                        share|improve this answer










                                                                                                        answered Aug 6 '18 at 6:26









                                                                                                        rsalmeirsalmei

                                                                                                        1698




                                                                                                        1698























                                                                                                            1














                                                                                                            Looks like you're building some kind of Caesar cipher.



                                                                                                            A much more generalized approach is this:



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


                                                                                                            outputs



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


                                                                                                            Not sure if it's a desired side effect of your code, but the order of your output will always be sorted.



                                                                                                            If this is what you want, the final line can be changed to:



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





                                                                                                            share|improve this answer




























                                                                                                              1














                                                                                                              Looks like you're building some kind of Caesar cipher.



                                                                                                              A much more generalized approach is this:



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


                                                                                                              outputs



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


                                                                                                              Not sure if it's a desired side effect of your code, but the order of your output will always be sorted.



                                                                                                              If this is what you want, the final line can be changed to:



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





                                                                                                              share|improve this answer


























                                                                                                                1












                                                                                                                1








                                                                                                                1







                                                                                                                Looks like you're building some kind of Caesar cipher.



                                                                                                                A much more generalized approach is this:



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


                                                                                                                outputs



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


                                                                                                                Not sure if it's a desired side effect of your code, but the order of your output will always be sorted.



                                                                                                                If this is what you want, the final line can be changed to:



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





                                                                                                                share|improve this answer













                                                                                                                Looks like you're building some kind of Caesar cipher.



                                                                                                                A much more generalized approach is this:



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


                                                                                                                outputs



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


                                                                                                                Not sure if it's a desired side effect of your code, but the order of your output will always be sorted.



                                                                                                                If this is what you want, the final line can be changed to:



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






                                                                                                                share|improve this answer












                                                                                                                share|improve this answer



                                                                                                                share|improve this answer










                                                                                                                answered Aug 27 '18 at 9:45









                                                                                                                firelynxfirelynx

                                                                                                                14.9k36381




                                                                                                                14.9k36381























                                                                                                                    1














                                                                                                                    To test multiple variables with one single value: if 1 in {a,b,c}:



                                                                                                                    To test multiple values with one variable: if a in {1, 2, 3}:






                                                                                                                    share|improve this answer




























                                                                                                                      1














                                                                                                                      To test multiple variables with one single value: if 1 in {a,b,c}:



                                                                                                                      To test multiple values with one variable: if a in {1, 2, 3}:






                                                                                                                      share|improve this answer


























                                                                                                                        1












                                                                                                                        1








                                                                                                                        1







                                                                                                                        To test multiple variables with one single value: if 1 in {a,b,c}:



                                                                                                                        To test multiple values with one variable: if a in {1, 2, 3}:






                                                                                                                        share|improve this answer













                                                                                                                        To test multiple variables with one single value: if 1 in {a,b,c}:



                                                                                                                        To test multiple values with one variable: if a in {1, 2, 3}:







                                                                                                                        share|improve this answer












                                                                                                                        share|improve this answer



                                                                                                                        share|improve this answer










                                                                                                                        answered Sep 20 '18 at 2:18









                                                                                                                        Md. Alamin MahamudMd. Alamin Mahamud

                                                                                                                        87711024




                                                                                                                        87711024























                                                                                                                            0














                                                                                                                            You can use dictionary :



                                                                                                                            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





                                                                                                                            share|improve this answer
























                                                                                                                            • This may append same more then once this. Set?

                                                                                                                              – Sergei
                                                                                                                              Feb 19 at 4:49
















                                                                                                                            0














                                                                                                                            You can use dictionary :



                                                                                                                            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





                                                                                                                            share|improve this answer
























                                                                                                                            • This may append same more then once this. Set?

                                                                                                                              – Sergei
                                                                                                                              Feb 19 at 4:49














                                                                                                                            0












                                                                                                                            0








                                                                                                                            0







                                                                                                                            You can use dictionary :



                                                                                                                            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





                                                                                                                            share|improve this answer













                                                                                                                            You can use dictionary :



                                                                                                                            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






                                                                                                                            share|improve this answer












                                                                                                                            share|improve this answer



                                                                                                                            share|improve this answer










                                                                                                                            answered Jul 31 '18 at 16:54









                                                                                                                            Rohit GawasRohit Gawas

                                                                                                                            393




                                                                                                                            393













                                                                                                                            • This may append same more then once this. Set?

                                                                                                                              – Sergei
                                                                                                                              Feb 19 at 4:49



















                                                                                                                            • This may append same more then once this. Set?

                                                                                                                              – Sergei
                                                                                                                              Feb 19 at 4:49

















                                                                                                                            This may append same more then once this. Set?

                                                                                                                            – Sergei
                                                                                                                            Feb 19 at 4:49





                                                                                                                            This may append same more then once this. Set?

                                                                                                                            – Sergei
                                                                                                                            Feb 19 at 4:49











                                                                                                                            0














                                                                                                                            Maybe you need direct formula for output bits set.



                                                                                                                            x=0 or y=0 or z=0 is equivalent to xyz = 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



                                                                                                                            lets map to bits: 'c':1 'd':0xb10 'e':0xb100 'f':0xb1000



                                                                                                                            relation of isc:



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



                                                                                                                            use math if formula 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))



                                                                                                                            ...



                                                                                                                            connect these formulas by following logic:



                                                                                                                            logic and is sum of squares of equations



                                                                                                                            logic or is product of equations



                                                                                                                            and you'll have total equation



                                                                                                                            express sum and you have total formula of sum



                                                                                                                            then sum&1 is c, sum&2 is d, sum&4 is e, sum&5 is f



                                                                                                                            after this you may form predefined array where index of string element would correspond to ready string.



                                                                                                                            array[sum] gives you the string.






                                                                                                                            share|improve this answer






























                                                                                                                              0














                                                                                                                              Maybe you need direct formula for output bits set.



                                                                                                                              x=0 or y=0 or z=0 is equivalent to xyz = 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



                                                                                                                              lets map to bits: 'c':1 'd':0xb10 'e':0xb100 'f':0xb1000



                                                                                                                              relation of isc:



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



                                                                                                                              use math if formula 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))



                                                                                                                              ...



                                                                                                                              connect these formulas by following logic:



                                                                                                                              logic and is sum of squares of equations



                                                                                                                              logic or is product of equations



                                                                                                                              and you'll have total equation



                                                                                                                              express sum and you have total formula of sum



                                                                                                                              then sum&1 is c, sum&2 is d, sum&4 is e, sum&5 is f



                                                                                                                              after this you may form predefined array where index of string element would correspond to ready string.



                                                                                                                              array[sum] gives you the string.






                                                                                                                              share|improve this answer




























                                                                                                                                0












                                                                                                                                0








                                                                                                                                0







                                                                                                                                Maybe you need direct formula for output bits set.



                                                                                                                                x=0 or y=0 or z=0 is equivalent to xyz = 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



                                                                                                                                lets map to bits: 'c':1 'd':0xb10 'e':0xb100 'f':0xb1000



                                                                                                                                relation of isc:



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



                                                                                                                                use math if formula 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))



                                                                                                                                ...



                                                                                                                                connect these formulas by following logic:



                                                                                                                                logic and is sum of squares of equations



                                                                                                                                logic or is product of equations



                                                                                                                                and you'll have total equation



                                                                                                                                express sum and you have total formula of sum



                                                                                                                                then sum&1 is c, sum&2 is d, sum&4 is e, sum&5 is f



                                                                                                                                after this you may form predefined array where index of string element would correspond to ready string.



                                                                                                                                array[sum] gives you the string.






                                                                                                                                share|improve this answer















                                                                                                                                Maybe you need direct formula for output bits set.



                                                                                                                                x=0 or y=0 or z=0 is equivalent to xyz = 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



                                                                                                                                lets map to bits: 'c':1 'd':0xb10 'e':0xb100 'f':0xb1000



                                                                                                                                relation of isc:



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



                                                                                                                                use math if formula 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))



                                                                                                                                ...



                                                                                                                                connect these formulas by following logic:



                                                                                                                                logic and is sum of squares of equations



                                                                                                                                logic or is product of equations



                                                                                                                                and you'll have total equation



                                                                                                                                express sum and you have total formula of sum



                                                                                                                                then sum&1 is c, sum&2 is d, sum&4 is e, sum&5 is f



                                                                                                                                after this you may form predefined array where index of string element would correspond to ready string.



                                                                                                                                array[sum] gives you the string.







                                                                                                                                share|improve this answer














                                                                                                                                share|improve this answer



                                                                                                                                share|improve this answer








                                                                                                                                edited Feb 18 at 10:57

























                                                                                                                                answered Feb 17 at 17:55









                                                                                                                                SergeiSergei

                                                                                                                                1,76512035




                                                                                                                                1,76512035

















                                                                                                                                    protected by Martijn Pieters Mar 8 '15 at 1:18



                                                                                                                                    Thank you for your interest in this question.
                                                                                                                                    Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                                                                                                                    Would you like to answer one of these unanswered questions instead?



                                                                                                                                    Popular posts from this blog

                                                                                                                                    Monofisismo

                                                                                                                                    Angular Downloading a file using contenturl with Basic Authentication

                                                                                                                                    Olmecas