在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()