2014-09-04 3 views
2

Я хочу, чтобы отфильтровать все кортежи, состоящие только из None-элементов из списка, поэтому для этого этот списокКак пропустить Нет хранения кортежа в списке?

listobj = [(None, None, None, None), (None, None, None, None), (None, None, None, None),(None,None,'01/02/2015','25'),(None,None,'01/02/2015',None),(0,None,None,None)] 

Я хочу, чтобы результат так:

listobj = [(None,None,'01/02/2015','25'),(None,None,'01/02/2015',None),(0,None,None,None)] 

ответ

6
>>> [x for x in listobj if any(y is not None for y in x)] 
[(None, None, '01/02/2015', '25'), (None, None, '01/02/2015', None), (0, None, None, None)] 
2
listobj= [i for i in listobj if i.count(None)<len(i)] 
1

Не уверен, что это должен быть классный однострочный, но вот один очень простой подход:

def noneSeq(seq): 
    """Helper function that determines if seq is all None.""" 
    for x in seq: 
    if x is not None: return False 
    return True 

a = [x for x in listobj if not noneSeq(x)] 

Это дает:

[(None, None, '01/02/2015', '25'), (None, None, '01/02/2015', None), 
(0, None, None, None)] 
Смежные вопросы