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

3
我遇到了一个问题,对于更高级的Python程序员来说可能很微不足道,但我作为初学者无法解决这个问题。
我只想从一个二维列表中删除一行,如果它符合某个条件 - 在我的情况下,如果该行包含某个字符。我希望用更加Pythonic的方式实现,而不是遍历所有列表项。因此,我的尝试是:
    alist = [[1,2],[3,4]]
    map(lambda ele : (if 2 in ele: tmp3.remove(ele)), alist) 

应该只删除第一行,因为它包含一个“2”。但是我遇到了一个“invalid syntax”的错误,不知道为什么!(我也找到了一些使用pandas包中的数据框解决方案,但由于我正在学习python,所以在这个阶段我想避免使用pandas ;) )提前感谢!
2个回答

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]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接