Add functions
- Add consecutive - Add last_consecutive
This commit is contained in:
parent
f75e2e2af9
commit
3bcc5b9f50
1 changed files with 29 additions and 0 deletions
29
utils.py
29
utils.py
|
@ -173,3 +173,32 @@ def find_point( list_ , index , axis = 'x' , threshold = 0.5 ):
|
||||||
inside = False
|
inside = False
|
||||||
i += 1
|
i += 1
|
||||||
return points
|
return points
|
||||||
|
def consecutive( list_ ):
|
||||||
|
"""
|
||||||
|
divide a sorted list of integer by consecutive part
|
||||||
|
"""
|
||||||
|
if not isinstance( list_ , list ) and not isinstance( list_ , np.ndarray ):
|
||||||
|
raise ValueError( 'list_ must be a list, ' + type( list_ ) + ' given' )
|
||||||
|
index = last_consecutive( list_ )
|
||||||
|
if index == len( list_ ) - 1:
|
||||||
|
return [ list_ ]
|
||||||
|
return consecutive( list_[ : i + 1 ] ) + consecutive( list_[ i + 1 : ] ) # happy recursion \o/
|
||||||
|
def last_consecutive( list_ ):
|
||||||
|
"""
|
||||||
|
return the last index of the first consecutive list
|
||||||
|
"""
|
||||||
|
if not isinstance( list_ , list ) and not isinstance( list_ , np.ndarray ):
|
||||||
|
raise ValueError( 'list_ must be a list, ' + type( list_ ) + ' given' )
|
||||||
|
first , lower , greater = list_[0] , 0 , len( list_ )
|
||||||
|
while greater - lower != 1:
|
||||||
|
i = lower + ( greater - lower ) // 2
|
||||||
|
if list_[ i ] - first != i: # outside of the consecutive list
|
||||||
|
greater = i
|
||||||
|
else:
|
||||||
|
if i != len( list_ ) - 1:
|
||||||
|
if list_[ i ] + 1 != list_[ i + 1 ]: # next one is not inside the consecutive list => limit retrieved
|
||||||
|
break
|
||||||
|
lower = i
|
||||||
|
else: # if inside the consecutive list and last element, every element is consecutive
|
||||||
|
break
|
||||||
|
return i
|
||||||
|
|
Loading…
Reference in a new issue