在python列表中刪除所有空元素


今天在測試數據的時候偶然發現一個問題,如下:

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 != '']

如果遇到一些復雜的問題,不得不有對原列表進行增刪操作,可以考慮遞歸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM