目标是编写一个接收列表的函数,并返回列表中的数字是否导致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]。我怎样才能这样做,而不是像上面的例子一样返回真假?
答案 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