鱼C论坛

 找回密码
 立即注册
查看: 1083|回复: 18

[已解决]关于[a:b:c]的问题

[复制链接]
发表于 2018-3-25 00:37:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 fan1993423 于 2018-3-25 01:02 编辑

[a:b:c]我知道这里c是步长的意思,比方说m='python'
n=m[1:5:2]这个能正常显示
但是比方要打印'htyp' n=m[:-2:-1]结果为什么就是'n'
又或者想打印'hty'  n=m[1:4:-1] 结果是''
再或者想打印'nohty' n=m[1::-1] 结果是'yp'
求人解释一下 这个切片是不是我哪里理解错误了?
最佳答案
2018-3-26 02:25:54
本帖最后由 8306最硬 于 2018-3-26 12:06 编辑
fan1993423 发表于 2018-3-25 23:15
为什么缺省的是-1呢,有点糊涂了,是因为这个-2是负数的缘故吗?然后是不是[1::1]就是从第二个字符串一直 ...


我觉得一点都不糊涂啊,来来来,敲黑板
当步长为1的时候,第一参数缺省为0,第二参数缺省为len(m)-1,第三参数自然是1了,规则是a到b必须从左到右
当步长为-1的时候,第一参数缺省为-1,第二参数缺省为-len(m)-1,第三参数自然是-1了,规则是a到b必须从右到左
可以看出缺省的参数是按规则正倒数的两端
[a::b]这个a无论取什么值都不会取空吗?
当然不是,b取1,把第二参数6代进去,a取7,就变成了[7::1],这样就是从右到左了,不符合规则就返回空了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-25 01:01:32 From FishC Mobile | 显示全部楼层
虽然我会用n=m[1:4],n=n[::-1]来实现,但是感觉写两行还是不如一行来的爽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 07:19:49 From FishC Mobile | 显示全部楼层
步长不能为负数,否则默认为1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 07:34:49 | 显示全部楼层
BngThea 发表于 2018-3-25 07:19
步长不能为负数,否则默认为1

我记得好像可以吧?-1就是倒过来走
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-25 10:24:55 | 显示全部楼层
步长为负值时,[:-2:-1]缺省的位置不是0而是-1,因此是n,如[::-1]从最后往前数
[1:4:-1] 1用-1步进不允许折返,因此是空
[1::-1]  到不允许折返的头,因此是yp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 10:45:43 From FishC Mobile | 显示全部楼层
timeislife 发表于 2018-3-25 07:34
我记得好像可以吧?-1就是倒过来走

那是前面没有取定范围才能用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 14:18:19 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-25 14:39 编辑

想实现'htyp'    m[3::-1] 或者 m[-3::-1]
想实现'hty'      m[-3:0:-1]
想实现'nohty'  m[-1:0:-1]

另外不写步长也可以一行的。。m[1:4][::-1]

补充---------------------------------------------------------------------------------------
步长其实是可以为负的,但是只能在取值范围也是倒的,比如-1到-7。
如果取值范围是正取的只会返回空字符,比如[1:4:-1]。
平常我们的字符串倒转[::-1]其实就是负步长,缺省参数是[-1: -len(m)-1: -1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-25 23:08:42 | 显示全部楼层
本帖最后由 fan1993423 于 2018-3-25 23:19 编辑
8306最硬 发表于 2018-3-25 14:18
想实现'htyp'    m[3::-1] 或者 m[-3::-1]
想实现'hty'      m[-3:0:-1]
想实现'nohty'  m[-1:0:-1]


我的理解是取值范围如果是从左到右,但步长是从右到走就不行,要么都从左到右[1:4:2],要么都从右到左[-1:-5:-2],但是按照这个理解‘htyp’ 用[-3::1]可以理解,但是为什么[3::-1]也能行的通?或者说是不是对于[a::c],有a,c是不是一定都能实现目标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-25 23:15:26 | 显示全部楼层
塔利班 发表于 2018-3-25 10:24
步长为负值时,[:-2:-1]缺省的位置不是0而是-1,因此是n,如[::-1]从最后往前数
[1:4:-1] 1用-1步进不允许 ...

为什么缺省的是-1呢,有点糊涂了,是因为这个-2是负数的缘故吗?然后是不是[1::1]就是从第二个字符串一直到最右边,而[1::-1]是从从第二个字符串到最左边,是不是说[a::b]这个a无论取什么值都不会取空吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 01:30:08 | 显示全部楼层
fan1993423 发表于 2018-3-25 23:08
我的理解是取值范围如果是从左到右,但步长是从右到走就不行,要么都从左到右[1:4:2],要么都从右到左[ ...

第二个参数缺省是-len(m)-1,就是-7的说,m[3:-7:-1]不就从右到左吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 02:25:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 8306最硬 于 2018-3-26 12:06 编辑
fan1993423 发表于 2018-3-25 23:15
为什么缺省的是-1呢,有点糊涂了,是因为这个-2是负数的缘故吗?然后是不是[1::1]就是从第二个字符串一直 ...


我觉得一点都不糊涂啊,来来来,敲黑板
当步长为1的时候,第一参数缺省为0,第二参数缺省为len(m)-1,第三参数自然是1了,规则是a到b必须从左到右
当步长为-1的时候,第一参数缺省为-1,第二参数缺省为-len(m)-1,第三参数自然是-1了,规则是a到b必须从右到左
可以看出缺省的参数是按规则正倒数的两端
[a::b]这个a无论取什么值都不会取空吗?
当然不是,b取1,把第二参数6代进去,a取7,就变成了[7::1],这样就是从右到左了,不符合规则就返回空了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 08:43:59 | 显示全部楼层
步长为正数时,[a:b:c] b要出现在a左边 不为空
步长为负数时,[a:b:c] a要出现在b左边 不为空
想实现'htyp'    m[3::-1] 或者 m[-3::-1]
p y t h o n 这个字符串里面 3和-3的索引是一个值 h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 11:29:58 | 显示全部楼层
8306最硬 发表于 2018-3-26 02:25
我觉得一点都不糊涂啊,来来来,敲黑板
当步长为1的时候,第一参数缺省为0,第二参数缺省为len(m)-1, ...

哦,你把这个缺省说了,加上我的理解,我现在明白了,但是步长为正的时候,第二个参数缺省为len(m)+1吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 11:34:17 | 显示全部楼层
喵叔 发表于 2018-3-26 08:43
步长为正数时,[a:b:c] b要出现在a左边 不为空
步长为负数时,[a:b:c] a要出现在b左边 不为空
想实现'hty ...

我知道3 -3的索引相同,我当时想的是3的话就应该从左到右,而步长为负,就会取空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 12:01:31 | 显示全部楼层
fan1993423 发表于 2018-3-26 11:34
我知道3 -3的索引相同,我当时想的是3的话就应该从左到右,而步长为负,就会取空

嗯,我当时想也是
但是再想想m[3]是第四个,m[-7]是第一个,从第四到第一就是从右到左的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 12:04:31 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-26 12:08 编辑
fan1993423 发表于 2018-3-26 11:29
哦,你把这个缺省说了,加上我的理解,我现在明白了,但是步长为正的时候,第二个参数缺省为len(m)+1吧


之前说错了,只是len(m),len(m)+1就是7了,'python'[7]是超出索引范围的,但是正常切片操作是不影响的,他直接当m[7]是最后一个,m[:7]和m[:6]是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 12:41:17 | 显示全部楼层
fan1993423 发表于 2018-3-25 23:15
为什么缺省的是-1呢,有点糊涂了,是因为这个-2是负数的缘故吗?然后是不是[1::1]就是从第二个字符串一直 ...

,因为步进是负的,-1和len(m)-1等同,-2即len(m)-2
[a::b]无论取什么都不会空是错误的,如果b为负值且绝对值比a大也返回空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 12:47:17 | 显示全部楼层
本帖最后由 67826832 于 2018-3-26 12:49 编辑

print(m[-3:-6:-1])   hty    我理解的是从倒数第3个字符返回至倒数第5个字符,-1是逆序进步    [-3:-6)应该是一个左闭右开的区间
print(m[-3:-7:-1])   htyp   
print(m[-1:-6:-1])   nohty
其他几个都差不多的意思  不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-28 15:52:02 | 显示全部楼层
fan1993423 发表于 2018-3-26 11:34
我知道3 -3的索引相同,我当时想的是3的话就应该从左到右,而步长为负,就会取空

从左往右 还是从右往左 取决于步长
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 23:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表