gpt4 book ai didi

python - 使用 Map 和 Filter 的列表理解的等价物

转载 作者:太空狗 更新时间:2023-10-30 02:36:07 25 4
gpt4 key购买 nike

我想使用映射和/或过滤器函数编写此代码。它返回列表中项目的索引,提供总和达到目标

我为此使用了列表理解,但看不到如何将第二个 for 循环放入 map/filter 函数中。我不确定要使用的语法如果我为 map/filter 函数的函数参数定义自己的函数

num = [2,5,7,11,6,15,3,4]
tgt= 9
[num.index(x) for x in num for y in num if x + y == tgt]

结果:

[0, 1, 2, 4, 6, 7]

最佳答案

由于 filtermap 都处理序列中的单个项目,因此您必须从列表中的每个项目的角度来查看您的逻辑,而不是项目的组合,这意味着您需要将列表理解中使用的表达式改写为单个项目的函数。因此,代替过滤条件 x + y == tgt,将其视为 x == tgt - y 是有益的,其中 y 也必须是 num 列表中的一个项目,以便您的列表理解可以重写为:

[num.index(x) for x in num if x in {tgt - y for y in num}]

有了这个等价的列表理解,很明显要实现过滤条件需要通过将 num 中的每个项目映射到它与 tgt 的差异来创建一个集合,这可以通过 tgt.__sub__ 方法来完成,并测试 num 中的每个项目 x 是否是集合的成员,这可以通过集合的__contains__方法来完成,最后将过滤后的序列映射到num.index输出每个匹配项的索引:

list(map(num.index, filter(set(map(tgt.__sub__, num)).__contains__, num)))

返回:

[0, 1, 2, 4, 6, 7]

关于python - 使用 Map 和 Filter 的列表理解的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55676999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com