Home > Mobile >  How to make a comparison of part of an array with one value
How to make a comparison of part of an array with one value

Time:12-07

if x[3] > y and x[4] > y and x[5] > y and x[6] > y and x[7] > y and x[8] > y:
           ...

Do U have a more elegant method to compare it? actually, I have to compare one value with 30 values in the array, do U know a better way to write it?

CodePudding user response:

You can use the all function:

if all(val > y for val in x[3:9]):
   # your code here

CodePudding user response:

You can use all function like: if all(val > y for val in x[3:9]):

CodePudding user response:

There are several ways of doing this.

Use any with a slice of your list:

 if any(ex<=y for ex in x[3:9]):
     # There is an item that is less than or equal to y in that slice

Use all

 if all(ex>y for ex in x[3:9]):
      # all x[3:9] are > y

Those functions will not tell you which item is greater than x[idx] -- only that there exists a condition that is true.

Or if you want the know the index of the first offending item, use next with a generator:

x_gr_y_idx=next(i for i in range(3,9) if x[i]>y)

And for all the items in a range that are offending:

[(i, x[i]) for i in range(3,9) if x[i]>y]

Using a slice will silently fail (in this scenario) for a slice that is out of range of the list:

>>> li=[1,2,3]
>>> [x<6 for x in li[10:14]]
[]

Whereas an index will give an IndexError for a bad index:

>>> [li[i]<6 for i in range(10,14)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <listcomp>
IndexError: list index out of range
  • Related