How to remove repetition when there is a common condition

Viewed 90

How do i remove the repetitions

 if a < 2 or b < 2 or c < 2 or d < 2: 
       pass #logic

I want to remove the repetitions. Something like this:

if (a,b,c,d) < 2:
   pass #logic 
6 Answers

I wouldn't import numpy just for this as other answers suggest. It's probably overkill.

I would do something like:

condition = lambda x: x < 2
if any(condition(x) for x in (a, b, c, d)):
    # whatever you want

Or more compact (but less reusable):

if any(x < 2 for x in (a, b, c, d)):
    # whatever you want

Another slightly different way is to check if the smallest variable is less than the target value. In other words, if the smallest variable is not less than the target - then surely none of them is:

if min(a, b, c, d) < 2:
    # do something

This however needs to actually find the minimal value behind the scenes and loses the short-circuiting advantage of using any with a generator expression.

When using numpy this can be done with .all() and .any():

import numpy as np

array = np.asarray([1,2,3])

if (array < 2).any():
    print('True')
else:
    print('False')

#output: True

if (array < 2).all():
    print('True')
else:
    print('False')

#output: False

In addition to other answers, use generator expression to reduce computing time

if True in (i < 2 for i in [a,b,c,d]):
   pass #logic

I would have used combination of Numpy and any here.

For example:

a, b, c, d = 10, 10, 10, 10

Convert it into a numpy array:

import numpy as np

arr = np.array([a, b, c, d])

And now you can do this:

if any(arr < 2):
    pass #logic

Use built-in any function:

if any(map(lambda x: x < 2, (a, b, c, d))):
    pass  # whatever here
Related