Identify groups of continuous numbers in a list

前端 未结 13 1921
误落风尘
误落风尘 2020-11-22 01:12

I\'d like to identify groups of continuous numbers in a list, so that:

myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])

Returns:

         


        
13条回答
  •  情话喂你
    2020-11-22 01:41

    Using numpy + comprehension lists:
    With numpy diff function, consequent input vector entries that their difference is not equal to one can be identified. The start and end of the input vector need to be considered.

    import numpy as np
    data = np.array([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])
    
    d = [i for i, df in enumerate(np.diff(data)) if df!= 1] 
    d = np.hstack([-1, d, len(data)-1])  # add first and last elements 
    d = np.vstack([d[:-1]+1, d[1:]]).T
    
    print(data[d])
    

    Output:

     [[ 2  5]   
      [12 17]   
      [20 20]]
    

    Note: The request that individual numbers should be treated differently, (returned as individual, not ranges) was omitted. This can be reached by further post-processing the results. Usually this will make things more complex without gaining any benefit.

提交回复
热议问题