代码之家  ›  专栏  ›  技术社区  ›  user357269

Python中算术序列到切片的转换

  •  0
  • user357269  · 技术社区  · 4 年前

    在Python中,有没有一种简洁的方法可以将整数的算术级数转换为切片?也许是一个很好的内置功能?

    这似乎是一个简单的问题,但基本上是一场噩梦。

    我只对非负整数输入感兴趣。

    我迄今为止最好的尝试是:

    def seq_to_slice(xs):
        if len(xs) == 0:
            return slice(0, 0)
        start = xs[0]
        if len(xs) == 1:
            return slice(start, start+1)
        else:
            step = xs[1] - start
            stop = xs[-1] + step
            if stop < 0:
                stop = None
            return slice(start, stop, step)
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   John    4 年前

    我认为如果序列没有统一的步长,你也需要失败。

    def seq_to_slice(arr):
        if len(arr) == 1:
            return slice(arr[0], arr[0]+1)
        diff = [arr[num] - arr[num-1] for num in range(1, len(arr))]
        if max(diff) == min(diff):
            step = max(diff)
        else:
            raise ValueError('Sequence cannot be converted to slice')
        step = None if step == 1 else step
        min_arr = None if min(arr) == 0 else min(arr)
        max_arr = max(arr) + 1
        if step and step < 0:
            min_arr, max_arr = max_arr - 1, min_arr - 1 if min_arr else min_arr
        return slice(min_arr, max_arr, step)
    
    seq_to_slice([1,2,5]) # Should fail