2016-11-30 9 views
1

мне нужно фильтровать список персонажа т.е.фильтрации списка записей в питона

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

как список понимания: ' a = [i для i в l, если он есть (j в i для j в (4,8))] ' –

+0

в этом случае измените' any' на 'all':' a = [i для i в l, если все (j в i для j в (4,8))] ' –

ответ

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, это тени встроенного имени

+0

Мне нужны обе записи в g. т.е. если мой список «[[1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 6, 3, 6, 2, 8], [4, 5, 9, 3 , 1, 8]] ', вывод должен быть' [[1, 2, 3, 4, 5, 6, 7, 8], [4, 5, 9, 3, 1, 8]] 'для' g = [4,8] ' –

+1

@VinodiniNatrajan Обновлен мой ответ, чтобы соответствовать этому требованию, мне просто нужно было изменить' any() 'to' all() ' –

+0

Он работает нормально. благодаря –

Смежные вопросы