Vinodini Natrajan
Vinodini Natrajan

Reputation: 155

filtering a list of entries in python

I need to filter a list of character ie

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

characters to grep is, g = [4,8]

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

    In [28]: a
    Out[28]: []

But I am ending up with this. Can someone help me?

I need the output as

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

Upvotes: 1

Views: 76

Answers (1)

Chris_Rands
Chris_Rands

Reputation: 41168

Your issue is that g in x is never True because g is a list that and that is never within one of your sub-lists, e.g. ([4,8] in [4,8,7] returns False). The right approach with 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]]

Or list comprehension:

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

Note, don't name your variables list, this shadows the built-in name

Upvotes: 2

Related Questions