【问题标题】:PYTHON - Remove tuple from list if contained in another listPYTHON - 如果包含在另一个列表中,则从列表中删除元组
【发布时间】:2017-03-27 15:03:59
【问题描述】:

我有一个元组列表:

list_of_tuples = [('4', 35.26), ('1', 48.19), ('5', 90.0), ('3', 90.0)]

tuple[0] 是一个 item_ID

tuple[1] 是一个角度

我有一个要从列表中删除/忽略的 item_ID 列表:

ignore_IDs = [5, 3]

我需要在list_of_tuples中找到最小的角度,只要它的ID不在ignore_IDs中。

这用于角度变化和忽略变化的 ID 的函数中。

谁能帮帮我?

如果解释不当请见谅。

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    如果我没有误解的话,这样的事情会做:

    min([t[1] for t in list_of_tuples if int(t[0]) not in ignore_IDs])
    

    【讨论】:

      【解决方案2】:

      您也可以使用 filter 和 lambda 来完成此操作:

      >>> list(filter(lambda x: x[0] not in map(str, ignore_IDs), list_of_tuples))
      [('4', 35.26), ('1', 48.19)]
      

      注意:使用 map(str, ignore_IDs) 行是因为您的元组 ID 和要忽略的 ID 之间的类型冲突。

      一个建议:如果您有很多要忽略的 ID,我建议您使用可散列的对象,例如字典或集合。可散列对象的成员资格查找是 O(1) 而不是列表的 O(n)

      【讨论】:

        【解决方案3】:

        min 函数支持一个键。您可以在密钥中使用 lambda 函数来获得您想要的答案。

        看这个例子

        min(list_of_tuples, key = lambda (i,x): x if int(i) not in ignore_IDs else '')[1]
        

        这将导致项目 id 不在忽略 id 中的最小角度

        35.26
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-09
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 2013-09-20
          • 1970-01-01
          • 2021-09-28
          • 2014-06-27
          相关资源
          最近更新 更多