在列表解析python中返回true或false

时间:2016-02-04 10:09:28

标签: python

目标是编写一个接收列表的函数,并返回列表中的数字是否导致True或False。 防爆。 [1,2,3,4] ---> [假,真,假,真]

我写了这部分代码:

def even_or_odd(t_f_list):
   return = [ x for x in t_f_list if x % 2 == 0]

我知道这段代码会返回[2,4]。我怎样才能这样做,而不是像上面的例子一样返回真假?

4 个答案:

答案 0 :(得分:13)

不应按谓词过滤,而应映射它:

def even_or_odd(t_f_list):
   return [ x % 2 == 0 for x in t_f_list]

答案 1 :(得分:3)

您也可以使用lambda:

l = [1,2,3,4]
map(lambda x: x%2 == 0, l)

答案 2 :(得分:1)

你也可以使用按位&来比%快一点:

t_f_list = [1,2,3,4]
res = [ not x&1 for x in t_f_list]
print(res)
[False, True, False, True]

<强>时序

In [72]: %timeit [not x&1 for x in t_f_list]
1000000 loops, best of 3: 795 ns per loop

In [73]: %timeit [ x % 2 == 0 for x in t_f_list]
1000000 loops, best of 3: 908 ns per loop

In [74]: %timeit list(map(lambda x: x%2 == 0, t_f_list))
1000000 loops, best of 3: 1.87 us per loop

注意:添加list map以获取list值,因为我使用的是python 3.x

答案 3 :(得分:0)

您可以使用列表推导来获取布尔值和值:

lst = [1,2,3,4]
result = [x%2 == 0 for x in lst] # Returns boolean
result_1 = [x for x in lst if x%2 == 0] # Returns values