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

Question:

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?

Asked By: Vasyl Sokolenko

||

Answers:

You can use the all function:

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

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

Answered By: Aryan

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
Answered By: dawg
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.