以下代码有效,但我感兴趣的是更短/更优雅/更多" 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' ]) ])
答案 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(...)))