python中slice的用法,
python教程栏目介绍slice参数过长的处理方法
很多朋友对切片参数的概念理解停留在概念上。切片有三个参数,即步进、开始和停止。因为参数的值是可变的,我们需要在下一步中处理它们。在之前的切片说明中,我们提到了列表数据过长的问题,这个问题也存在于参数中。下面来解释一下步进、启动、停止三个参数的处理,帮助大家深入理解slice中的参数问题。
相关免费学习推荐:python教程(视频)
1.step 的处理
if (r-step==Py_None) {/* step默认为1,不难理解*/
*步长=1;
}否则{
如果(!_PyEval_SliceIndex(r-step,step))return-1;
/*步长不能为零,否则将被报告为ValueError。应该注意的是,只有在执行BINARY _ SUBSCR时才会报告这个异常。
*创建切片对象时,如果步长为0,则不会报告错误*/
if (*step==0) {
PyErr _ SetString(pye xc _ value error,切片步长不能为零);
return-1;
}
/*步长的最小值,根据size _ t定义。
* #定义PY _ SSIZE _ T _ MAX((PY _ SSIZE _ T)(((size _ T)-1)1))
*所以在32对系统上是-2147483647 */
if (*step -PY_SSIZE_T_MAX)
* step=-PY _ SSIZE _ T _ MAX;
}
2.start 的处理
/*未设置start时的默认值,length是序列的长度*如果切片从序列的开头开始(步骤0),start=0
*如果切片从序列的末尾开始(步骤0),start=length-1 */
defstart=*步骤0?长度-1 : 0;
if (r-start==Py_None) {
* start=defstart
}
否则{
如果(!_PyEval_SliceIndex(r-start,start))return-1;
/*如果start为负,实际上是a[-1:]=a[4:] */
if(* start 0)* start=length;
/*如果长度之和仍然小于0,即-start超过了序列长度,那么start将根据step的正负进行设置。
*设置到序列的开始(0)或结束(-1)位置。
* a[-6:-1]=a[0:-1]
* a[-6:-1:-1]=a[-1:-1:-1]*/
if (*start 0) *start=(*step 0)?-1 : 0;
/* start超出了序列的长度。此时,start将根据step的正负进行设置。
*设置为序列的长度或序列长度减1(最后一个元素)
* a[6:-1]=a[5:-1]
* a[6:-1:-1]=a[4:-1:-1]*/
if (*start=length)
*开始=(*第0步)?长度- 1 :长度;
}
3.stop 的处理
/*未设置stop时的默认值,length是序列的长度*如果切片从序列的开头开始(步骤0),则stop=length,比最后一个元素的下标多1。
*如果切片从序列的结尾开始(步骤0),start=-1,比第一个元素的下标小1 */
defstop=*第0步?-1 :长度;
if (r-stop==Py_None) {
* stop=defstop
}否则{
如果(!_PyEval_SliceIndex(r-stop,stop))return-1;
/*如果stop为负,实际上是a[:-1]=a[:4] */
if(* stop 0)* stop=length;
/*如果长度之和仍然小于0,即-stop超过了序列长度,那么stop将根据step的正负进行设置。
*设置到序列的开始(0)或结束(-1)位置。
* a[3:-6]=a[3:0]
* a[3:-6:-1]=a[3:-1]*/
if (*stop 0) *stop=(*step 0)?-1 : 0;
if (*stop=长度)
* stop=(*第0步)?长度- 1 :长度;
}注意:
指定的区间从开始左开右闭,可以省略开头索引号,不能省略冒号到结尾,可以省略结尾索引号,不能省略冒号。默认步长为1。如果连续切片,数字和冒号都可以省略。00-1010 Python中切片操作的完整语法:
# i默认为0。
默认情况下,# j是透镜
# k步长,默认为1。
S [i:J3360K]其中I,J,k J和K都可以是负数:
如果i 0或k0等价于len(S) i或Len(S)J;
如果k 0,表示[i,k]之间的字符按照步长k从右向左计数,而不是从左向右计数。
S=abcdefg
S[-3:-1]
ef
S [-1:-:-1] #按照步骤1,从右到左,而不是从左到右,对位于S[-1:-3]中的字符子串进行计数。
gf
S[4:2:-1]
埃德
输出一个空字符串
S [33603360-1] #逆序
Gfedcba 需要指出s [i:j3360k]的形式,相当于以下形式:
S=abcdefg
S[slice(None,None,-1)] #相当于使用slice对象访问数组元素。
‘gfedcba’就是这样。本文介绍了python中超长切片参数的处理方法和例子。以上是python中超长切片参数的处理方法和例子的详细说明。请多关注热门IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。