我认为如果序列没有统一的步长,你也需要失败。
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