好的,所以我正在经历一个Udacity课程,我一直试图通过Python字符串操作找出这个特殊的怪癖。
鉴于这种情况,
1 x = ''
2 print x[0]
我会在第2行得到“索引超出范围”错误,因为我应该这样做,因为空字符串中没有第0个位置。
但是在这个场景中,
1 x = ''
2 print x[0:]
无论如何都不会出现索引错误。 为什么?子序列运算符如何绕过应该存在的索引错误怎么样?
提前感谢您的帮助!
如果我不清楚,here是我正在谈论的问题的80秒解决方案的链接(对我当前的问题的解释不太令人满意)。
答案 0 :(得分:2)
x[0]
应返回单个元素,甚至可以是None
。 (例如,[None][0] == None
)所以当索引0处什么都没有时,它会返回什么?它不能返回任何内容 - 它甚至不能返回None
,因为它None
实际上在该索引处是不明确的。它必须提出异常。
x[0:]
返回包含0个或更多元素的列表,因此它可以通过返回空列表返回“我找不到任何内容”。 (请注意,x[0:]
未通过调用x[0]
x[1]
等实现,而是使用不同的基础代码。)