1.首先看通过索引删除:
lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in range(len(lst)):
if lst[i].endswith('gh'):
# del lst[i]
lst.remove(lst[i])
print(lst)
不管是del lst[i],还是lst.remove(lst[i]),都报错:
解决办法:
由于remove在for循环中动态改变了list长度和每一个元素的位置,因此不能用正序循环,否则报错index溢出;正确的做法是使用 倒序循环
lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in range(len(lst)-1,-1,-1):
if lst[i].endswith('gh'):
del lst[i]
# lst.remove(lst[i])
print(lst)
不管是del lst[i] 还是lst.remove(lst[i])
运行结果:
倒序就有点懵了,range(3,-1,-1)
索引从3开始,3到-1,步长是-1
3,2,1,0
lst[3] lst[2] lst[1] lst[0]就是倒序了
2.换一种方法,切片删除:
lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in lst[:]:
if i.endswith('gh'):
lst.remove(i)
print(lst)
运行结果:
['kkkkpppp', 'ssssoooppp']
哈哈 突然发现lst[:]和lst 是一样的
lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in lst:
if i.endswith('gh'):
lst.remove(i)
print(lst)
#运行结果
#['kkkkpppp', 'ssssoooppp']