Implementing python slice notation

前端 未结 6 554
轻奢々
轻奢々 2021-02-07 05:06

I\'m trying to reimplement python slice notation in another language (php) and looking for a snippet (in any language or pseudocode) that would mimic the python logic. That is,

6条回答
  •  无人及你
    2021-02-07 06:04

    Here's a straight port of the C code:

    def adjust_endpoint(length, endpoint, step):
         if endpoint < 0:
             endpoint += length
             if endpoint < 0:
                 endpoint = -1 if step < 0 else 0
         elif endpoint >= length:
             endpoint = length - 1 if step < 0 else length
         return endpoint
    
    def adjust_slice(length, start, stop, step):
         if step is None:
             step = 1
         elif step == 0:
             raise ValueError("step cannot be 0")
    
         if start is None:
             start = length - 1 if step < 0 else 0
         else:
             start = adjust_endpoint(length, start, step)
    
         if stop is None:
             stop = -1 if step < 0 else length
         else:
             stop = adjust_endpoint(length, stop, step)
    
         return start, stop, step
    
    def slice_indices(length, start, stop, step):
         start, stop, step = adjust_slice(length, start, stop, step)
         i = start
         while (i > stop) if step < 0 else (i < stop):
             yield i
             i += step
    
    def mySlice(L, start=None, stop=None, step=None):
         return [L[i] for i in slice_indices(len(L), start, stop, step)]
    

提交回复
热议问题