繁体   English   中英

在 Python 中将等差数列转换为切片

[英]Converting arithmetic sequence to slice in Python

在 Python 中,有没有一种巧妙的方法可以将整数的算术级数转换为切片? 也许是一个不错的内置 function?

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

我只对非负 integer 输入感兴趣。

到目前为止我最好的尝试:

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)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM