Is there a functional way to do this?

I have an array [0,1,2,3,0,1,2,2,3] and I want the first chunk of
non-decreasing values from this array (eg: In this case I want
[0,1,2,3])


Sounds like a use for a generator wrapper:

  def monotonic(iterator):
    i = iter(iterator)
    prev = i.next()
    yield prev
    while True:
      this = i.next()
      if prev <= this:
        yield this
        prev = this
      else:
        break

  >>> lst1 = [0,1,2,3,0,1,2,2,3]
  >>> lst2 = [0,1,2,3,3,0,1,2,2,3]
  >>> print list(monotonic(lst1))
  [0,1,2,3]
  >>> print list(monotonic(lst2))
  [0,1,2,3,3]

Adjust the "<=" to "<" depending on your needs (my "lst2" condition probes that edge)

-tkc



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to