我遇到的以下问题对于更高级的python程序员来说可能是非常微不足道的,但我 - 作为一个python初学者 - 无法弄清楚问题。
我只想从2D列表中删除一行,如果它符合某个条件 - 在我的情况下,如果该行包含某个字符。我想以更实用的python方式实现它,而不是循环遍历所有列表项。因此,我的尝试是
alist = [[1,2],[3,4]]
map(lambda ele : (if 2 in ele: tmp3.remove(ele)), alist)
应该只删除第一行,因为它包含“2”。但我只是得到一个错误“无效的语法”,我不知道为什么!
(我也遇到了一些使用pandas包中的数据帧的解决方案,但是当我正在学习python时,我想在这个阶段避免使用pandas;)
提前致谢!
答案 0 :(得分:3)
您不能在lambda中使用if
语句。您可以使用更清晰的列表理解:
alist = [row for row in alist if 2 not in row]
这样做的好处是可以迭代列表一次,而不是使用map
和list.remove
,尽管你得到一个新的列表。
答案 1 :(得分:2)
如果您尝试从列表中删除元素,则需要filter
而不是map
,这通常用于转换,并且不会更改列表的长度:
alist = [[1,2],[3,4]]
filter(lambda ele : 2 not in ele, alist)
# [[3, 4]]