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)

3.控制台多行输入,数据输出的异常

import math
n = int(input())
data=[]
for i in range(n):
    d=input()
    print(d)
print(data)

输出结果对比:

控制台手动输入时,由于输入一行,换行输入“Enter”键进行换行复制多行内容,粘贴到控制台输出
很明显最后一行,没有换行符;
按循环语句正常执行

粘贴多行内容后,自动运行n-1行的内容,需要按异常“Enter”键执行最后一行输入;

解决措施:复制时候,多复制一行

3.all()函数空元组、空列表返回值为True

 

all(iterable)   #iterable -- 元组或列表。

如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值