python中的坑

1.列表索引超出范围

获取列表的切片,开始的 index 超过了成员个数不会产生 IndexError,而是仅仅返回一个空列表

索引值超出范围后,会产生IndexError错误

list = ['a', 'b','c', 'd', 'e']
print(list[10:])     #[]
# print (list[10])   #IndexError: list index out of range

2. 循环语句中删除列表元素的小坑

因为列表自动收缩,保证列表元素没有间隙,所以,这种办法删除列表内的元素时,会产生有间隔的for循环,会漏删除

print(list)
print('*'*30)
for i,x in enumerate(list):
    print('第%d个元素为%d'%(i,x))
    if x==3:
        # del list[i]  #删除列表元素方法1
        list.remove(x) #删除列表元素方法2
    if x == 4:
        list.remove(x)
print('*' * 30)
print(list)
[1, 2, 3, 4, 5, 6]
******************************
第0个元素为1
第1个元素为2
第2个元素为3
第3个元素为5
第4个元素为6
******************************
[1, 2, 4, 5, 6]

循环遍历列表时,按0,1,2...索引依次遍历;

列表list删除元素3后,列表收缩为[1, 2, 4, 5, 6]

进行下一步循环遍历时,遍历索引为3,跳过元

素4,导致无法删除元素4

 解决思路

方法1:倒序删除——被删元素前面的值不会向后靠,所以可以完整的遍历到列表中所有的元素

print(list)
# print('*'*30)
for x in list[::-1]:
    # print('第%d个元素为%d'%(i,x))
    if x==3:
        # del list[i]  #删除列表元素方法1
        list.remove(x) #删除列表元素方法2
    if x == 4:
        list.remove(x)
# print('*' * 30)
print(list)

方法2:使用filter()函数——用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换

def delx(x):
    return x!=3 and x!=4

tmplist=filter(delx,list_1)
newlist=list(tmplist)
print(newlist)
发布了109 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42233538/article/details/104266574
今日推荐