我有两个列表列表,一个包含所有记录,例如[['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk'], ['cereal', 'skittles']]
一个,包含规则[['milk', 'eggs'], ['milk','ham']]
。
我正在尝试按list_of_rules过滤记录,但是,[['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk']]
尽管它与[['milk', 'eggs'], ['milk','ham']]
订单和其他项目不完全匹配,但我想捕获它。
records = [['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk'], ['cereal', 'skittles']]
list_of_rules = [['milk', 'eggs'], ['milk','ham']]
# this list comprehension only filters for exact matches
results = [[x for x in L if x in records] for L in list_of_rules]
# expected output
print(results)
>>[['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk']]
任何和所有建议非常感谢。
您可以使用以下列表理解:
records = [['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk'], ['cereal', 'skittles']]
list_of_rules = [['milk', 'eggs'], ['milk','ham']]
results = [L for L in records if any(set(R).issubset(L) for R in list_of_rules)]
print(results) # => [['eggs', 'milk', 'butter'], ['ham', 'spam', 'milk']]
它为每个记录列表循环L
并检查是否存在至少一个规则列表R
(使用内置函数any
),其中R
包括L
(使用set方法issubset
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句