[英]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.