检查列表理解中的可变条件数

时间:2016-12-14 02:19:00

标签: python tuples list-comprehension

假设check(x)是一个返回true / false的函数。 假设foo是元组列表

我想过滤foo中的元组。但是,我想检查的条件数量会有所不同

n = 2的

[ x for x in foo if ( check(x[0]) and check(x[1]) ) ] 

n = 3的

[ x for x in foo if ( check(x[0]) and check(x[1]) and check(x[2]) ) ] 

以任何方式将此列表理解作为n?

的函数编写

2 个答案:

答案 0 :(得分:3)

任何不使用内置all(…)的原因?

  

所有(...)

all(iterable) -> bool
     

如果True bool(x) True xiterable的所有值iterable,则返回True

     

如果n为空,请返回x

如果[ x for x in foo if all(check(y) for y in x) ] n >= len(x)的长度,那么您可以使用:

[ x for x in foo if all(check(x[i]) for i in range(n)) ]

如果n

len(x)

如果min(n, len(x))可能大于[ x for x in foo if all(check(x[i]) for i in range(n)) ] ,请将范围限制为n

答案 1 :(得分:2)

使用all

[ x for x in foo if len(filter(check, x[:n])) == n ]

其中date_default_timezone_set('America/Los_Angeles');是支票数

您也可以使用filter

执行此操作
    var isotope_port = $('.port-isotope');
isotope_port.isotope({
    'itemSelector': '.item'
});

$('.port-filter a').click(function() {
    $(this).parent().parent().find('li').removeClass('selected');
    $(this).parent().addClass('selected');

    var selector = $(this).attr('data-filter');
    isotope_port.isotope({ filter: selector });
    return false;
});