'How do I roll a list or numpy array until a certain condition is met?

I have a numpy array

import numpy as np
arr = np.array([70, 80, 90, 100, 110, 120, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                 11, 12, 1, 2, 3, 4, 5, 6])

Here, for example, I want to roll the array until one (of the 1s) is at the start and then record what the shift was, but you could image some other arbitrary condition on the roll.

arr_expected = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 70, 80, 90, 100, 110, 120])
shift_of_arr = ?

How do I roll the array until some condition is met?

Can it be done without a for loop and if so how?

For context: These are monotonically increasing values, but not necessarily with the same interval.

Thanks as ever!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source