删除包含特定元素的矩阵中的行(python)

时间:2017-01-02 23:21:43

标签: python list lambda

我遇到的以下问题对于更高级的python程序员来说可能是非常微不足道的,但我 - 作为一个python初学者 - 无法弄清楚问题。

我只想从2D列表中删除一行,如果它符合某个条件 - 在我的情况下,如果该行包含某个字符。我想以更实用的python方式实现它,而不是循环遍历所有列表项。因此,我的尝试是

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

应该只删除第一行,因为它包含“2”。但我只是得到一个错误“无效的语法”,我不知道为什么!

(我也遇到了一些使用pandas包中的数据帧的解决方案,但是当我正在学习python时,我想在这个阶段避免使用pandas;)

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

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

这样做的好处是可以迭代列表一次,而不是使用maplist.remove,尽管你得到一个新的列表。

答案 1 :(得分:2)

如果您尝试从列表中删除元素,则需要filter而不是map,这通常用于转换,并且不会更改列表的长度:

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