Python len(string)显示的索引号比实际字符串多

Python len(string)显示的索引号比实际字符串多,python,python-3.x,string,indexing,Python,Python 3.x,String,Indexing,所以函数len(string)显示的索引比字符串中实际显示的索引多,我认为len()从索引0开始计数 程序执行后的索引长度显示在下面的终端中 在本例中,索引总数应为8,而不是9 编辑: 如果len()返回长度,那么当我打印(s[0:3])时,它如何返回928 它不应该返回0、1、2、3个索引吗?那么总共应该是4位数 索引从0开始计数,但长度仍然是人类对长度的定义(总共有九个字符)。在0-up索引语言中,第一个不可访问的索引是长度本身。字符数为9,len返回9 len计数不是从0开始的 如果它从

所以函数len(string)显示的索引比字符串中实际显示的索引多,我认为len()从索引0开始计数

程序执行后的索引长度显示在下面的终端中


在本例中,索引总数应为8,而不是9

编辑:

如果len()返回长度,那么当我打印(s[0:3])时,它如何返回928

它不应该返回0、1、2、3个索引吗?那么总共应该是4位数


索引从
0开始计数,但长度仍然是人类对长度的定义(总共有九个字符)。在0-up索引语言中,第一个不可访问的索引是长度本身。

字符数为9,len返回9 len计数不是从0开始的

如果它从零开始

>>> len("12") #Real 2
1
>>> len("1") #Real 1
0
>>> len("") #Real 0 | return -1? That's why it doesn't start at zero


len(string)
返回字符串中的字符数。在您的例子中,9。它显示字符串中的所有字符。您可能将它与对元素的访问混淆了?这是从零开始的,因此最后一个元素比长度小1。“在本例中,它应该是8个索引,而不是9个”为什么?你的逻辑没有意义,在12英寸的标尺中,你会说它只能测量11英寸长的项目吗?“在0-up索引语言中,第一个不可访问的索引是长度本身。”不一定。我打赌OP来自Perl的背景,其中使用
$\code>表示法的数组的“长度”指的是最后一个可访问的索引。@blhsing:但这不是长度。数组的标量解释(
scalar@arr
)是长度,
$#arr
只是一个古怪的Perl运算符,它特别表示“数组的最后一个索引”。我承认,可能有些语言的长度和第一个不可访问的索引并不完全相关(例如JavaScript,所有索引都可以访问,读取超出长度的内容只会发现更多未定义的值,而赋值超出长度会增加长度),但总的来说,根据定义,实际长度必须超过0-up语言中最后一个有效索引的长度。是的,我知道,但我只是推测这就是OP混淆的原因。:-)好吧,那么当我打印(s[0:3])时,它怎么只返回928?@TuyenKhong:Slicing语法是半开放的;它在开始索引上是包含的,在结束索引上是独占的。除了与
range
等保持一致外,它还具有方便的特性,
end-start
获取结果的长度,而不需要在后面加1(假设序列足够长,可以生成整个切片)。因此
s[0:3]
(相当于
s[:3]
,因为
0
是正向切片的隐式开始)正在切片索引0、1和2,但在“恰好在”索引3之前停止。好的,那么当我打印(s[0:3])时,它怎么只返回928?@TuyenKhong这与len不同,它从零和len开始​​从零开始,但它将零分配给空
len([])==0和len(“”==0