通过子集选择列表元素

时间:2019-07-12 14:28:13

标签: python list functional-programming

我有以下列表:

ScrollView

t0=[['a'],
 ['a', 'h'],
 ['a', 'd', 'k', 'r', 'v'],
 ['a', 'b', 'c', 'k'],
 ['a', 'b', 'c', 's', 'u'],
 ['a', 'b', 'f', 't'],
 ['a', 'b', 'e', 'l', 'n', 'o'],
 ['a', 'b', 'd', 'n', 'o'],
 ['a', 'b', 'd', 'e', 'n', 'o'],
 ['a', 'b', 'd', 'e', 'm', 'n', 'o', 't']] 

对于t1中的每个元素,我要遍历t0并选择其中t1是子集的元素,则输出应如下所示:

t1=[['a', 'b'], ['a', 'c'], ['a', 'd']]

因此,例如,第一个元素是[[["a", "b", "c", "k"], ["a", "b", "c", "s", "u"], ["a", "b", "f", "t"], ["a", "b", "e", "l", "n", "o"], ["a", "b", "d", "n", "o"], ["a", "b", "d", "e", "n", "o"], ["a", "b", "d", "e", "m", "n", "o", "t"]], [["a", "b", "c", "k"], ["a", "b", "c", "s", "u"]], [["a", "d", "k", "r", "v"], ["a", "b", "d", "n", "o"], ["a","b", "d", "e", "n", "o"], ["a", "b", "d", "e", "m", "n", "o","t"]]] ,因此输出的第一个元素将是t0的那些元素,其中['a','b']是它们的子集。 我想知道如何编写一个函数来做到这一点?

2 个答案:

答案 0 :(得分:2)

我认为这就是您想要的:

[[j for j in t0 if set(i) <= set(j)] for i in t1]

答案 1 :(得分:0)

在python 2中,您可以执行以下操作:

map(lambda x: filter(lambda y: set(x) <= set(y), t0), t1 )

在python 3中,将是:

list(map(lambda x: list(filter(lambda y: set(x) <= set(y), t0)), t1 ))