【问题标题】:Delete rows in matrix containing certain elements (python)删除矩阵中包含某些元素的行(python)
【发布时间】:2017-01-02 23:21:43
【问题描述】:

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

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

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

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

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

提前致谢!

【问题讨论】:

    标签: python list lambda


    【解决方案1】:

    您不能在 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]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多