仅使用map函数将列表A中存在于列表B的元素标记为true,其余标记为false
解决思路:用Map函数生成一维布尔列表
首先别担心,新手遇到这种嵌套map的问题很正常,咱们一步步来理清楚~
你的代码问题出在哪?
你当前的SchnittTrueA函数用了嵌套map:先对A的每个元素,调用funktion去和B的所有元素逐一比较,所以每个A的元素都会生成一个和B长度相同的子列表,最终得到的就是二维数组[[false, false], [false, true]]。但你需要的是对A的每个元素,直接返回「是否存在于B中」的单个布尔值,而不是和B每个元素的对比结果。
通用解决方案(任意语言都适用)
核心思路是:只需要一层map,对A中的每个元素,判断它是否在B中存在,然后返回对应的true/false。具体步骤:
- 定义一个辅助函数,输入一个元素和列表B,返回该元素是否在B中的布尔值;
- 用map把这个辅助函数应用到列表A的所有元素上(注意把B作为固定参数传给辅助函数)。
1. Maple 实现示例
# 辅助函数:判断元素x是否在列表L中 is_in := proc(x, L::list) member(x, L); # Maple内置函数,直接返回布尔值 end proc: # 主函数:用map处理A的每个元素 SchnittTrueA := proc(A::list, B::list) # 用匿名函数把B固定为is_in的第二个参数,再映射到A的每个元素 map((x) -> is_in(x, B), A); end proc:
测试一下:
k := [1,3]; l := [2,3]; SchnittTrueA(k, l); # 输出 [false, true]
2. 通用伪代码/其他语言示例(比如Python)
如果你想用其他语言验证,这里是Python版本(同样只用map,禁止显式循环):
def is_in_b(element, b_list): # 用map生成元素与B中每个元素的相等列表,再用any判断是否存在True return any(map(lambda item: item == element, b_list)) def schnitt_true_a(a_list, b_list): # 把is_in_b应用到A的每个元素,固定B为参数 return list(map(lambda x: is_in_b(x, b_list), a_list)) # 测试 a = [1,3] b = [2,3] print(schnitt_true_a(a, b)) # 输出 [False, True]
关键要点总结
- 避免不必要的嵌套map,只需要一层map处理源列表A的每个元素;
- 核心是给每个A元素绑定「判断是否在B中」的逻辑,而不是和B的每个元素逐一对比;
- 很多语言都有内置的「元素是否存在」函数(比如Maple的
member、Python的in),直接用会比自己写相等判断更简洁。
内容的提问来源于stack exchange,提问作者El magnifico
相关产品推荐
相关产品推荐

