在python中筛选条目列表

在python中筛选条目列表,python,list,filter,Python,List,Filter,我需要筛选一个角色列表 In [16]: list Out[16]: [[1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 6, 3, 6, 2, 7], [4, 5, 9, 3, 1, 8]] grep的字符是,g=[4,8] In [27]: a = filter(lambda x:g in x, list) In [28]: a Out[28]: [] 但我最终会这样。有人能帮我吗? 我需要输出为 [[1, 2, 3, 4,

我需要筛选一个角色列表

    In [16]: list
    Out[16]: [[1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 6, 3, 6, 2, 7], [4, 5, 9, 3, 1, 8]]
grep的字符是,
g=[4,8]

    In [27]: a = filter(lambda x:g in x, list)

    In [28]: a
    Out[28]: []
但我最终会这样。有人能帮我吗?

我需要输出为

   [[1, 2, 3, 4, 5, 6, 7, 8], [4, 5, 9, 3, 1, 8]]

您的问题是x中的
g
永远都不是
True
,因为
g
是一个列表,而且它从来都不在您的子列表中,例如(
[4,8]in[4,8,7]
返回
False
)。使用
过滤器的正确方法是:

l = [[1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 6, 3, 6, 2, 7], [4, 5, 9, 3, 1, 8]]
g = [4,8]
filter(lambda x:all(c in x for c in g), l)
# [[1, 2, 3, 4, 5, 6, 7, 8], [4, 5, 9, 3, 1, 8]]
或列表理解:

[item for item in l if all(c in item for c in g)]
# [[1, 2, 3, 4, 5, 6, 7, 8], [4, 5, 9, 3, 1, 8]]

注意,不要将变量命名为
列表
,这会将内置名称隐藏为列表理解:
a=[i代表i in l,如果有的话(j in i代表j in(4,8))
在这种情况下,将
any
更改为
all
a=[i代表i in l,如果全部(j in i代表j in(4,8))]
我需要g中的两个条目都存在。也就是说,如果我的列表是
[[1,2,3,4,5,6,7,8],[2,3,6,3,6,6,2,8],[4,5,9,3,1,8]
,那么输出应该是
[[1,2,3,3,4,5,6,6,7,7,7,8],
对于
g=[4,8]。@VinodiniNatrajan更新了我的答案以满足这个要求,我只需要将
any()
改为
all()