python3下,list为空,切片时下标越界也不报错

2022-07-25  本文已影响0人  丙吉
问题 回看自己的代码发现里面有个BUG,空list 在窗口切片时,下标越界也不报错。

比如我想把一个原始列表,进行去重处理,如果原始列表的当前元素不在新建列表的窗口内,我则填加至新列表,之前写的代码,回看里面有个BUG, 对开始的几个,就是空List,还去取切片,不是应该取不到才对么?就去查找了下原因。
代码如下:

del_1 =[]
ori_1 = [1,2,1,2,1,2,3,4,5]
for i in range(len(ori_1)):
    if ori_1[i] not in del_1[-5:]:
        del_1.append(ori_1[i])
        print('当前元素为第{}'.format(i),'窗口为5的新列表为',del_1)

# 结果如下:
当前元素为第0 窗口为5的新列表为 [1]
当前元素为第1 窗口为5的新列表为 [1, 2]
当前元素为第6 窗口为5的新列表为 [1, 2, 3]
当前元素为第7 窗口为5的新列表为 [1, 2, 3, 4]
当前元素为第8 窗口为5的新列表为 [1, 2, 3, 4, 5]
但如果List中单独取某个下标越界的元素会报错。
ori_1[20]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-25-093d4095441b> in <module>
----> 1 ori_1[20]

IndexError: list index out of range
image.png

原因:当访问索引超出其长度的列表中的元素时,不能返回任何内容(无法表示不存在的元素),这就是抛出错误的原因。但是,当切片时,是在对原始列表进行切片复制,如果开始或结束无效,新列表可以为空,所以不抛出错误。

上一篇 下一篇

猜你喜欢

热点阅读