中年|漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?( 三 )


如果使用1-based的索引方式 , 那么 , 想让a[:n]表达“取前n个元素”的意思 , 你要么使用闭合区间切片语法 , 要么在切片语法中使用切片起始位和切片长度作为切片参数 。

半开区间切片语法如果和1-based的索引方式结合起来 , 则会变得不优雅 。
而使用闭合区间切片语法的话 , 为了从第i位索引开始取后n个元素 , 你就得把表达式写成a[i:i+n-1] 。
这样看来 , 1-based的索引方式 , 与切片起始位+长度的语法形式配合使用会不会更合适?这样你可以写成a[i:n] 。 事实上 , ABC语言就是这样做的——它发明了一个独特的语法 , 你可以把表达式写成a@i|n 。
但是 , index:length这种方式在其它情况下适用吗?说实话 , 这点我有些记不清了 , 但我想我是被半开区间语法的优雅迷住了 。
特别是当两个切片操作位置邻接时 , 第一个切片操作的终点索引值是第二个切片的起点索引值时 , 太漂亮了 , 无法舍弃 。
例如 , 你想将一个字符串以i , j两个位置切成三部分 , 这三部分的表达式将会是a[:i] , a[i:j]和a[j:] 。
中年|漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
本文插图

中年|漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
本文插图

中年|漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
本文插图

中年|漫话:如何给女朋友解释为什么计算机从0开始计数,而不是从1开始?
本文插图


推荐阅读