get wrong list在python中从另一个列表获取一个列表的相应元素时使用map函数

2024-04-25 13:40:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子:

a = [1,2,3,4]
b = [True,False,True,False]

我想得到a中对应于bTrue的元素,不要使用for循环。 我使用map函数来解决它,但它出错了:

def f(x,y):
    if x:
        return y
s = list(map(f,b,a))

s[1, None, 3, None],我不想要None,我该怎么办?你知道吗


Tags: 函数nonefalsetrue元素mapforreturn
3条回答

可以使用filter删除None。你知道吗

例如:

a = [1,2,3,4]
b = [True,False,True,False]

def f(x,y):
    if x:
        return y
s = list(filter(None, map(f,b,a)))
print(s)

输出:

[1, 3]

使用compress

from itertools import compress
a = [1,2,3,4]
b = [True,False,True,False]
s = list(compress(a, b))

输出:

[1, 3]

为什么不直接zipping2列出并选择对应于True的值呢?你知道吗

a = [1,2,3,4]
b = [True,False,True,False]

print([x for x, y in zip(a, b) if y])

相关问题 更多 >