foo = 'eggs'
foo[:1] # the same is foo[0]
foo[-1:] # the same is foo[-1]
这些方法之一有什么好处吗?
我在这里碰到了这个 https://hg.python.org/cpython/file/3.4/Lib/xml/etree/ElementPath.py#l254
UPD。你能去链接吗?变量path是一个字符串。我很困惑,为什么他们使用切片而不是使用concreate索引。
if path[-1:] == "/":
答案 0 :(得分:1)
字符串是切片的特殊情况,因为切片返回str
,但是要求具体索引也返回str
。与C,C ++,Java不同,我们在Python中没有char
数据类型。
您可以在普通list
上看到真正的区别。使用分号返回一个切片,即list
,而具体索引返回列表中的单个元素;在这种情况下,int
。也就是说,数据类型是不同的。
>>> foo = [66,67,68,69]
>>> foo[:1]
[66]
>>> foo[-1:]
[69]
>>> foo[0]
66
>>> foo[-1]
69
答案 1 :(得分:1)
切片的工作原理如下:
#bring everything from start to end as list
foo[::]
#bring last item as list
foo[-1:]
#careful not to confuse with ->bring last item
foo[-1]
切片基本上就像这样
foo[starting_point:ending_point:step]
#default starting point=0
#default end point is len(foo)
#default step=1
检查foo[-1]
和foo[-1:]
之间的区别除了第一个返回项目(不可变)而第二个返回列表(可变)之外,如果foo[]
为空,{ {1}}会引发foo[-1]
而IndexError
会返回一个空列表。
现在在您的链接上: https://hg.python.org/cpython/file/3.4/Lib/xml/etree/ElementPath.py#l254
我们在这里讨论字符串,因此foo[-1:]
和path[-1]
的结果将是一个字符串。因此,首选path[-1:]
的原因是,如果path[-1:]
,path=""
将提升path[-1]
而IndexError
将返回path[-1:]
答案 2 :(得分:0)
str
是一种特殊情况,因为切片和元素访问都将返回另一个str
。不同之处在于字符串为空时会发生什么:提取列表会返回一个空字符串,而获取一个具体元素会引发错误。
--> test = 'hello'
--> test[0]
'h'
--> test[:1]
'h'
--> empty = ''
--> empty[:1]
''
--> empty[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range