1.列表索引超出范围
获取列表的切片,开始的 index 超过了成员个数不会产生 IndexError,而是仅仅返回一个空列表
索引值超出范围后,会产生IndexError错误
list = ['a', 'b','c', 'd', 'e']
print(list[10:]) #[]
# print (list[10]) #IndexError: list index out of range
2. 循环语句中删除列表元素的小坑
因为列表自动收缩,保证列表元素没有间隙,所以,这种办法删除列表内的元素时,会产生有间隔的for循环,会漏删除
| [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;