代码之家  ›  专栏  ›  技术社区  ›  bua

在python中从列表中简单删除元素

  •  1
  • bua  · 技术社区  · 16 年前

    a=[11, -1, -1, -1]
    msg=['one','two','tree','four']
    msg[where a<0]
    ['two','tree','four']
    

    以类似的简单方式(没有讨厌的循环)。

    我不想在我自己的帖子中发送另一个答案,所以我也找到了一些不错的解决方案,

    filter(lambda x: not x.endswith('one'),msg)
    
    4 回复  |  直到 16 年前
        1
  •  10
  •   LukáÅ¡ Lalinský    16 年前

    您可以使用 list comprehensions zip 功能被使用。这将生成一个元组列表。, [(11, 'one'), ...] ).一旦你有了这个,你就可以迭代结果,检查第一个元素是否低于0,并返回第二个元素。有关语法的更多详细信息,请参阅链接的Python文档。

    [y for (x, y) in zip(a, msg) if x < 0]
    

    实际的问题似乎是在 msg 不包含字符串的列表 "one" 这可以直接完成:

    [m for m in msg if "one" not in m]
    
        2
  •  2
  •   SilentGhost    16 年前
    [m for m, i in zip(msg, a) if i < 0]
    
        3
  •  1
  •   dalloliogm    16 年前

    >>> import numpy as np
    >>> a = np.array([11, -1, -1, -1])
    >>> msg = np.array(['one','two','tree','four'])
    >>> a < 0
    array([False,  True,  True,  True], dtype=bool)
    
    >>> msg[a < 0]
    array(['two', 'tree', 'four'], dtype='|S4')
    

        4
  •  0
  •   Prabhu    16 年前

    我想 如果a[i]<0]