当索引位置未知时,切片与索引之间的区别



当索引位置未知时,使用切片而不是索引更好,因为索引返回超出范围的错误?

from random import randint
__index__ = randint(0, 100)
print(__index__)
key = "Some random string which comes on our way and we don't find the length"
''' Slicing is better when unknown length of a string?''' 
x = key[__index__:__index__+1]
if x is '':
print("No value in slicing")
else:
print("Sliced value %s" % (x))
''' Indexing runs into IndexError: string index out of range when out of range'''
x = key[__index__]
if x is None:
print("No value in indexing")
else:
print("Indexed value %s" % (x))

当随机索引超出范围时,它会在索引中出错。在这种情况下使用切片更好吗?

$ python main.py
98
No value in slicing
Traceback (most recent call last):
File "main.py", line 15, in <module>
x = key[__index__]
IndexError: string index out of range

试一试:

from random import randint
index = randint(0, 100)
key = "Some random string which comes on our way and we don't find the length"
try:
print('Index value: {}'.format(key[index]))
except IndexError:
print('No value found with index: {}'.format(index))

要回答您的问题,最好索引未知长度的序列而不是切片。

在您的代码中,key[__index__:__index__+1]key[__index__]相同,只是如果找不到索引,索引会引发IndexError,而切片如果未找到切片,则会返回空字符串(或元组或列表等(。无论如何,最好处理引发异常的情况,此时,您知道找不到索引。这还可以避免代码中不必要的if else语句。

我希望这有帮助!

当索引位置未知时,最好使用切片而不是索引。因为,如果我们尝试检索超出对象范围的值,则通过 Index 获取值可能会引发 IndexError,同时,如果我们使用切片运算符,即使我们尝试检索超出界限的值,也不会引发任何类型的错误。切片将简单地为未找到的任何索引返回一个空对象。

>>>l=[1,2,3,4,5,5]
>>>l[6:]
>>>[]

如您所见,即使索引 6 的值不存在,它仍然返回一个空对象而不会引发任何错误。 对于同样的例子,如果我们进行索引,它会引发一个错误

>>>l[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

最新更新