3
def isIncreasing(seq):
    flag = True
    for i in range(len(seq) - 1):
        if seq[i + 1] < seq [i]:
            flag = False
    return flag


a = [1, 2, 3, 4, 5]  # print True
b = [2, 3, 1, 5, 4]  # print False

I have two sequence. Is there any better way to modify my function if the sequence is incrementing?

vincentlai
  • 379
  • 5
  • 18

3 Answers3

1

You can do it in a one liner:

all(seq[i] < seq[i+1] for i in range(len(seq)-1))

Credits: this answer

Ken4scholars
  • 6,076
  • 2
  • 21
  • 38
1

Returning as soon as you find one is better. You can leverage pythons built in functions to do that:

def isIncreasing(seq):
   return all(a<b for a,b in zip(seq,seq[1:]))

This zippes your sequence into pairs:

[1,2,3,4] => [(1,2),(2,3),(3,4)]

and checks each pair. all() terminates as soon as it finds a False.

Documentation:

Patrick Artner
  • 50,409
  • 9
  • 43
  • 69
1

Using numpy.diff() and all()

In [33]: all(i>=1 for i in np.diff(b))
Out[33]: False

In [34]: all(i>=1 for i in np.diff(a))
Out[34]: True
Fredrik Pihl
  • 44,604
  • 7
  • 83
  • 130