【问题标题】:Filtering list of tuples based on the availability of a member in a list根据列表中成员的可用性过滤元组列表
【发布时间】:2011-11-26 15:51:13
【问题描述】:

我想使用像 [1,7] 这样的列表过滤像 [(1,22,1),(5,1,8),(8,3,4),(7,5,6)] 这样的元组列表,这最终会给我结果 [(1,22,1),(5,1,8),(7,5,6)];由于(8,3,4) 既没有1 也没有7,因此被淘汰。

我可以为此编写一个综合函数。但如果可能的话,我正在寻找一个简短的列表理解。

谢谢。

【问题讨论】:

    标签: python list tuples list-comprehension


    【解决方案1】:
    >>> tup_list = [(1,22,1),(5,1,8),(8,3,4),(7,5,6)]
    >>> filter_list = [1,7]
    >>> [tup for tup in tup_list if any(i in tup for i in filter_list)]
    [(1, 22, 1), (5, 1, 8), (7, 5, 6)]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      items = [(1,22,1),(5,1,8),(8,3,4),(7,5,6)]
      result = [ item for item in items if (set([1,7]) & set(item))]
      
      >>> [(1, 22, 1), (5, 1, 8), (7, 5, 6)]
      

      【讨论】:

      • 这有一定的优雅,但不幸的是,我不认为这是sets 导致性能更好的解决方案的情况。您可以将set([1, 7]) 考虑在内,但您必须每次都进行交叉点和set(item),并且交叉点不会短路,不像any()。
      • @agf :就性能而言,我同意,我认为 any() 解决方案更好,但由于 OP 正在寻找“短”列表理解,我还没有到此为止; )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多