过滤python中的条目列表

时间:2016-11-30 15:00:45

标签: 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, 5, 6, 7, 8], [4, 5, 9, 3, 1, 8]]

1 个答案:

答案 0 :(得分:2)

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

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]]

注意,不要为变量list命名,这会影响内置名称