今天在測試數據的時候偶然發現一個問題,如下:
test = ['a','','b','','c','','']
for i in test:
if i == '':
test.remove(i)
print(test)
Out[3]: ['a', 'b', 'c', '']
for循環居然不能刪除列表中所有空值!
偶然收到@有問題盡管問我 發的消息,才對此問題有些明白。下面是他的原話:
for的計數器是依次遞增的,但列表的內容已通過remove更改,i迭代的值為a ‘’ ‘’ ‘’然后越界,所以,只能刪除前三個空元素。
這個問題算是大家非常容易忽略的細節問題。在遍歷列表時,特別要注意遍歷過程中不要對原列表進行增刪操作,以免影響迭代過程。
這也是把
if i == '' 換成 if len(i) == 0
依舊不行的原因。
搜尋了一下網上的做法,下面兩種方法可以做到:
#第一種:
while '' in test:
test.remove('')
#第二種:
mytest = [i for i in test if i != '']
如果遇到一些復雜的問題,不得不有對原列表進行增刪操作,可以考慮遞歸。
