索引位置未知时切片与索引之间的差异

时间:2018-08-16 05:05:03

标签: python python-3.x

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

    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

2 个答案:

答案 0 :(得分:0)

尝试一下:

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语句。

我希望这会有所帮助!

答案 1 :(得分:0)

当索引位置未知时,最好使用切片而不是索引。因为如果尝试检索超出对象范围的值,则按索引获取值可能会引发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