Don*_*eto 4 python list-comprehension list python-3.x map-function
我想使用地图和/或过滤器功能编写此代码。它返回列表中项目的索引,前提是总和达到目标
我已经为此使用列表理解,但是看不到如何将第二个for循环获取到map / filter函数中。我不确定使用的语法如果我为map / filter函数的function参数定义自己的函数
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]
Run Code Online (Sandbox Code Playgroud)
结果:
[0, 1, 2, 4, 6, 7]
Run Code Online (Sandbox Code Playgroud)
由于这两个filter及map以上序列中各个项目的工作,你就必须从每个项目的列表中的角度,而不是项目的组合,这意味着检视你的逻辑,你需要改一下你的列表中理解为使用的表达式单个项目的功能。x + y == tgt因此,代替过滤条件,将其查看为也是有益的x == tgt - y,其中y还必须是num列表中的一项,这样您的列表理解可以重写为:
[num.index(x) for x in num if x in {tgt - y for y in num}]
Run Code Online (Sandbox Code Playgroud)
与此相当的列表解析,它就变得清晰,实现过滤条件将需要通过映射每个项目制定一套num其与差别tgt,可与做tgt.__sub__方法和测试每个项目x中num,如果它是一个成员可以使用集合的__contains__方法来完成,最后,将过滤后的序列映射到num.index以输出每个匹配项的索引:
list(map(num.index, filter(set(map(tgt.__sub__, num)).__contains__, num)))
Run Code Online (Sandbox Code Playgroud)
返回:
[0, 1, 2, 4, 6, 7]
Run Code Online (Sandbox Code Playgroud)