检查列表数组是否包含另一个列表中的元素

twf*_*wfx 5 python python-2.7

给定一个列表数组a,另一个列表bd.我如何检查是否在列表元素一个中存在b(或另一个例子,在d)?我知道我可以使用元素 for循环来检查每个元素是否都是b/d,但有没有API可以快速完成?

 a = [[1,4], [17,33,2],[2,33]]

 b = [1,4,5,6]
 c = [[1,4]]

 d = [2,33]
 e = [[17,33,2],[2,33]]
Run Code Online (Sandbox Code Playgroud)

让我们这样说,给出列表ab,如何有效地编写下面的循环?让我们使用列表理解在一行中说.

        newls = []
        for sublist in a:
           newls.append(list(set(sublist).intersection(set(b))))  
Run Code Online (Sandbox Code Playgroud)

mha*_*wke 4

我怀疑这是否是您真正想要的,但这是您所要求的,即单行列表理解,它产生与 for 循环相同的结果:

newls = [list(set(sublist).intersection(set(b))) for sublist in a]

a = [[1,4], [17,33,2],[2,33]]
b = [1,4,5,6]
>>> c = [list(set(sublist).intersection(set(b))) for sublist in a]
>>> c
[[1, 4], [], []]
Run Code Online (Sandbox Code Playgroud)

您可能不希望其中有空列表,因此:

>>> c = filter(None, [list(set(sublist).intersection(set(b))) for sublist in a])
>>> c
[[1, 4]]
Run Code Online (Sandbox Code Playgroud)

请注意,这不会给出第二种情况的预期结果:

a = [[1,4], [17,33,2],[2,33]]
d = [2,33]
e = filter(None, [list(set(sublist).intersection(set(d))) for sublist in a])

>>> e
[[33, 2], [33, 2]]
Run Code Online (Sandbox Code Playgroud)