统计站老站长推荐app视频,五合一免费建站,wordpress 会员支付宝,做网站先做前端好还是先做逻辑在Python中实现可以用标准Python语法进行切片的类(即负索引、单步执行等)时#xff0c;有时可以将切片转换为“理智的、向前的切片”#xff0c;以确定切片的元素。怎样才能以简洁/优雅的形式写出这样一个函数呢#xff1f;在对于“理智的、向前的切片”#xff0c;我指的是…在Python中实现可以用标准Python语法进行切片的类(即负索引、单步执行等)时有时可以将切片转换为“理智的、向前的切片”以确定切片的元素。怎样才能以简洁/优雅的形式写出这样一个函数呢在对于“理智的、向前的切片”我指的是一个与初始切片等效的切片在这个意义上结果元素是相同的但是有一个正步长没有负索引也没有大于对象长度的索引。在示例(假设数组长度为10)slice(None, 4,None) - slice( 0, 4, 1)slice( -7, 12, 1) - slice( 3,10, 1)slice(None,None, -1) - slice( 0,10, 1)slice( 7, 3, -2) - slice( 5, 8, 2)slice( 9, 1, -3) - slice( 3,10, 3)编写一个执行这种转换的函数并不是非常困难但我不能编写得简洁明了。尤其是在将“向后切片”转换为等效的“向前切片”时确定起始索引似乎相当麻烦。在工作示例^{pr2}$... 在编辑(最终功能)通过使用slice.indices()doublep善意地指向我它变成了def to_sane_slice(s, N):# get rid of Nones, overly large indices, and negative indices (except -1 for# backward slices that go down to first element)start, stop, step s.indices(N)# get number of steps remainingn, r divmod(stop - start, step)if n 0 or (n0 and r0):return slice(0,0,1)if r ! 0: # its a stop index, not an last indexn 1if step 0:start, stop, step start(n-1)*step, start-step, -stepelse: # step 0, step 0 is not allowedstop startn*stepstop min(stop, N)return slice(start, stop, step)