如果想要一边遍历,一遍删除list中所有元素,下面的做法会有错误:
wordList = ['a', 'b', 'c', 'd', 'e']
for w in wordList:
print('before ',wordList, w)
wordList.remove(w)
print('after ', wordList, w)
结果为:
before ['a', 'b', 'c', 'd', 'e'] a
after ['b', 'c', 'd', 'e'] a
before ['b', 'c', 'd', 'e'] c
after ['b', 'd', 'e'] c
before ['b', 'd', 'e'] e
after ['b', 'd'] e
可见,如果删除了一个元素后,下一个遍历的元素是当前删除元素之后第二个元素。
wordList = ['a', 'b', 'c', 'd', 'e']
for i in range(len(wordList))[::-1]:
wordList.pop(i)
print(wordList)
结果:
['a', 'b', 'c', 'd']
['a', 'b', 'c']
['a', 'b']
['a']
[]
wordList = ['a', 'b', 'c', 'd', 'e']
newList = [i for i in wordList]
for w in newList:
wordList.remove(w)
print(wordList)
结果:
['b', 'c', 'd', 'e']
['c', 'd', 'e']
['d', 'e']
['e']
[]