2017-01-02 126 views
3

對於更高級的python程序員,下面的問題對我來說可能非常微不足道,但我作爲一個python初學者不能解決問題。在包含某些元素的矩陣中刪除行(python)

我只想從2D列表中刪除一行,如果它匹配一定的條件---在我的情況下,如果該行包含某個字符。我想用更實用的python方式來完成,而不是遍歷所有列表項。因此,我的嘗試是

alist = [[1,2],[3,4]] 
    map(lambda ele : (if 2 in ele: tmp3.remove(ele)), alist) 

這應該只是刪除了第一行,因爲它包含了一個「2」。但我只是得到一個錯誤「無效的語法」,我不知道爲什麼!

(我也碰到它採用dataframes從熊貓包一些解決方案,但我學習蟒蛇,我想避免在這個階段大熊貓;))

提前感謝!

回答

3

您不能在lambda表中使用if語句。你可以使用更清晰的列表理解

alist = [row for row in alist if 2 not in row] 

這也有通過列表迭代一次,而不是使用maplist.remove的優勢,雖然你會得到一個新的列表。

2

如果你想從列表中刪除元素,你需要filter代替map這是經常用於轉化和不改變列表的長度:

alist = [[1,2],[3,4]] 
filter(lambda ele : 2 not in ele, alist) 
# [[3, 4]] 
相關問題