2017-05-05 60 views
1

刪除值我有一個列表,如何從名單列表在Python

[['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 

我想從列表中刪除所有的「」。

我試過的代碼是:

>>> for line in list: 
...  if line == '': 
...   list.remove(line) 
... 
print(list) 

,它顯示的輸出爲:

[['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 

有人建議可以有什麼錯呢?

+0

哪裏嵌套表從何而來?首先不用「'''創建它們會更好。 – mkrieger1

+0

@ mkrieger1我有一個未正確分隔的原始文件。我轉換爲列表並因此輸出。想要刪除這些不需要的值。 –

+1

我的意思是:如果你向我們展示瞭如何創建列表,我們可以告訴你如何避免這些條目,而不需要再次刪除它們。 – mkrieger1

回答

4

這是你想要什麼:

a = [['Name', 'Place', 'Batch'], ['11', '', 'BBI', '', '2015'], ['12', '', 'CCU', '', '', '', '', '2016'], ['13', '', '', 'BOM', '', '', '', '', '2017']] 
b = [[x for x in y if x != ''] for y in a] # kudos @Moses 
print(b) # prints: [['Name', 'Place', 'Batch'], ['11', 'BBI', '2015'], ['12', 'CCU', '2016'], ['13', 'BOM', '2017']] 

您的解決方案不起作用,因爲line成爲每一步的整個子表和子表中沒有的元素。

現在看來您正試圖在原地修改原始列表(不創建任何附加變量)。這是一個崇高的原因,但循環列表,你正在修改,因爲你正在循環不建議,並可能導致您的代碼引發錯誤(IndexError或其他)。

最後,請勿使用名稱list,因爲Python在內部使用它,並且您正在覆蓋其預期的用法

+2

明確的測試可能會更好,因爲這會過濾掉所有* falsy *值 –

+0

@MosesKoledoye True。謝謝! –

2

您正在對子列表運行測試,而不是它們包含的項目。你需要一個嵌套for做你想做的。但是,迭代時從list.remove列表中刪除項目通常會導致不可預知的結果。

但是,您可以使用列表理解過濾掉空字符串:

r = [[i for i in x if i != ''] for x in lst] 
#      ^^ filter condition