在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 None's, 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 & remaining

n, r = divmod(stop - start, step)

if n < 0 or (n==0 and r==0):

return slice(0,0,1)

if r != 0: # its a "stop" index, not an last index

n += 1

if step < 0:

start, stop, step = start+(n-1)*step, start-step, -step

else: # step > 0, step == 0 is not allowed

stop = start+n*step

stop = min(stop, N)

return slice(start, stop, step)

python正向切片_使Python切片正常(正/正向+无无+无负索引+在边界内)相关推荐

  1. python怎么后退_使python迭代器向后退?

    无论如何,要使python列表迭代器向后移动? 基本上我有这个 class IterTest(object): def __init__(self, data): self.data = data s ...

  2. python反转列表不用切片_关于python:使用切片表示法反转列表

    在下面的例子: foo = ['red', 'white', 'blue', 1, 2, 3] 在所有的元素:将打印foo[0:6:1]foo.然而,foo[6:0:-1]将omit 0th首届欧元. ...

  3. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. python 三维图片 任意切片_在python中实现将一张图片剪切成四份的方法

    import cv2 # [1]导入OpenCv开源库 import numpy as np image_path = "F:11111111111111111111111111111100 ...

  6. python数字切片_剖析python切片「:」「::-1」「-1::」

    剖析python切片[:][::-1][-1::] 我们在面试python相关职位时,总是会碰到一些面试python切片的试题,另外在解决某些问题时也经常会用到切片操作,因此勇哥在这里给大家详细介绍p ...

  7. python中iloc切片_如何使用iloc和loc 对Pandas Dataframe进行索引和切片

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 在这篇文章中,我们将使用iloc和loc来处理数据.更具体地说,我们将通过iloc和loc例子来学习切片和 ...

  8. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  9. python培训班-Python培训机构_高品质Python线下开发培训班推荐-黑马程序员

    Python编程基础基础班1 课时:15天技术点:97项测验:2次学习方式:线下面授 学习目标 1.掌握Python开发环境基本配置|2.掌握运算符.表达式.流程控制语句.数组等的使用|3.掌握字符串 ...

最新文章

  1. 服务器安全配置之注册表设置
  2. 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
  3. 重置SVN用户名与密码,修改SVN的IP地址
  4. Codeforces Round #325 (Div. 2) Laurenty and Shop 模拟
  5. java计算二叉树的节点最小值_java计算二叉树的高度以及叶节点个数
  6. Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)2
  7. springBoot 登录拦截器
  8. java连接oracle数据库 -- jdbc连接
  9. Delphi unit单元文件结构
  10. Nokia Booklet 3G试用小记
  11. python创意小作品-[专题]在Python教学中应用turtle创意编程实践
  12. MATLAB--四种取整函数
  13. 《精通linux设备驱动程序开发》——USB
  14. 计算机毕业设计ssm高校学报管理系统lt10k系统+程序+源码+lw+远程部署
  15. 由浅入深学java pdf_由浅入深学Java:基础、进阶与必做260题 PDF_IT教程网
  16. 滑动时固定在头部的一部分会变色(向下滑会变红)
  17. 使用Python画小猪佩奇(turtle库)
  18. docker挂载mysql会失败_Docker Mysql 挂载 /var/lib/mysql 后无法启动
  19. 修改 nginx 的默认端口
  20. 谷粒学院day09——课程发布与阿里云视频点播服务

热门文章

  1. bootstrap 导航菜单 折叠位置_python测试开发django44.xadmin自定义菜单项
  2. mysql 命令desc tables_oracle中与mysql中的命令 show databases, show tables, desc table类似的命令集...
  3. 电脑上我的文档图标不见了怎么办
  4. 微软推行 Windows 10 更新政策 往后不会太强硬要求升级!
  5. 嵌入式linux 配置usb otg,嵌入式linux系统环境下USB设备的驱动实现
  6. python数字对应车站_python爬虫查询车站信息
  7. 二级c语言笔试58,全国计算机等级考试-二级C语言笔试试题.doc
  8. matlab中有哪些输出函数,MATLAB中查找并输出的函数有什么
  9. c# 计算机ip,C# 获取电脑的IP,网关,MAC,计算机名。。
  10. java xms512m_安装版的tomcat设置JAVA_OPTS=-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M...