Python如果找不到则删除

时间:2015-09-09 15:46:20

标签: python list sortedset

以下代码有效,但我感兴趣的是更短/更优雅/更多" Pythonic"编程以下内容的方法:

#!/usr/bin/env python

from sortedcontainers import SortedSet

def removeSubsumed(L, R):
    """Returns those lists in L that are not supersets of any list in R"""
    result = []
    for l in L:
        fg = True
        for r in R:
            if l >= r:
                fg = False
                break
        if fg:
            result.append(l)
    return result

print removeSubsumed([ SortedSet([ 'a', 'b', 'c' ]),
                       SortedSet([ 'd', 'e', 'f' ]),
                       SortedSet([ 'g', 'h', 'i' ]) ],
                     [ SortedSet([ 'a', 'b' ]),
                       SortedSet([ 'g' ]) ])

2 个答案:

答案 0 :(得分:4)

您可以使用any()和列表理解。示例 -

def removeSubsumed(L, R):
    return [s for s in L if not any(s >= r for r in R)]

any() - 如果任何元素为True,则返回True,否则返回False(即使它作为参数接收的iterable为空)。

答案 1 :(得分:1)

此外,您可以尝试一种功能性的方式,但我必须说,this方法的工作速度要快得多:

def removeSubsumed(L, R):
    return filter(lambda l: not any(map(lambda r: l >= r, R)), L)

print(list(removeSubsumed(...)))