python官方扩展索引是什么_为什么python允许序列的切片索引超出范围?

关于超范围指数的部分问题

切片逻辑自动将索引剪辑到序列的长度。

为了方便起见,允许切片索引扩展到超过端点。必须对每个表达式进行范围检查,然后手动调整限制,这将是一件很痛苦的事情,所以Python会为您这样做。

考虑希望显示不超过文本消息前50个字符的用例。

简单的方法(Python现在做的事情):

preview = msg[:50]

或者困难的方法(自己做极限检查):

n = len(msg)

preview = msg[:50] if n > 50 else msg

手动实现端点调整的逻辑很容易被忘记,也很容易出错(在两个地方更新50),很冗长,而且速度很慢。Python将这种逻辑移动到其内部,使其简洁、自动、快速和正确。这就是我喜欢蟒蛇的原因之一——)

关于分配长度与输入长度不匹配的部分问题

OP还想知道允许诸如

p[20:100] = [7,8]

其中,分配目标的长度(80)与替换数据的长度(2)不同。

用弦作类比最容易看出动机。考虑一下,

"five little monkeys".replace("little", "humongous")

. 注意目标“小”只有六个字母,“大”有九个字母。我们对列表也可以这样做:

>>> s = list("five little monkeys")

>>> i = s.index('l')

>>> n = len('little')

>>> s[i : i+n ] = list("humongous")

>>> ''.join(s)

'five humongous monkeys'

这一切归根结底都是为了方便。

在引入

复制()

清除()

方法,这些习惯用语:

s[:] = [] # clear a list

t = u[:] # copy a list

即使现在,我们在筛选时也会使用此项更新列表:

s[:] = [x for x in s if not math.isnan(x)] # filter-out NaN values

希望这些实际的例子能给我们一个很好的视角来解释为什么切片可以像它那样工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值