如何解决如何使用reduce在无序列表中搜索键?
我有一个基本的 reduce 函数,我想减少一个列表以检查一个项目是否在列表中。我在下面定义了函数,其中 f 是比较函数,id_ 是我要搜索的项目,a 是列表。例如,reduce(f,2,[1,6,7])
将返回 True,因为 2 在列表中。
def reduce(f,id_,a):
if len(a) == 0:
return id_
elif len(a) == 1:
return a[0]
else:
# can call these in parallel
res = f(reduce(f,a[:len(a)//2]),reduce(f,a[len(a)//2:]))
return res
def isequal(x,element):
if x == True: # if element has already been found in list -> True
return True
if x == element: # if key is equal to element -> True
return True
else: # o.w. -> False
return False
我意识到这不起作用,因为 x 不是我要搜索的键。我知道 reduce 是如何处理求和和乘积的,但我没有看到这个函数如何知道检查下一个元素是否匹配的关键是什么。
我很抱歉,我对此有点陌生。提前感谢您的任何见解,我非常感谢!
解决方法
根据您的示例,您似乎要解决的问题是确定某个值是否在列表中。在这种情况下,reduce
可能不是最好的方法。要检查特定值是否在列表中,Python 有一种更简单的方法:
my_list = [1,6,2,7]
print(2 in my_list)
print(55 in my_list)
True
False
编辑:鉴于 OP 评论说他们需要使用 reduce
来解决问题,下面的代码将起作用,但我并不为此感到自豪。 ;^) 要了解如何使用 reduce
,这里是 a good source of information。
示例:
from functools import reduce
def test_match(match_params,candidate):
pattern,found_match = match_params
if not found_match and pattern == candidate:
match_params = (pattern,True)
return match_params
num_list = [1,3,4,5]
_,found_match = reduce(test_match,num_list,(2,False))
print(found_match)
_,(55,False))
print(found_match)
输出:
True
False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。