这是我在各种语言的新程序员的许多问题中看到的逻辑错误的一般性问题和答案。
问题是在数组中搜索与某些输入条件匹配的元素。伪代码中的算法看起来像这样:
always_false
即使成功找到匹配的元素,此代码也会报告“未找到”。
答案 0 :(得分:6)
问题在于,当您通过数组线性搜索某些内容时,您无法知道在到达数组末尾之前找不到它。问题中的代码为每个不匹配的元素报告“未找到”,即使可能存在其他匹配元素。
简单的修改是使用一个跟踪你是否找到某个东西的变量,然后在循环结束时检查这个变量。
found = false
for each element of Array:
if element matches criteria:
do something with element
found = true
maybe break out of loop (if only interested in first match)
if not found:
print "Not found"
Python在else:
循环中有一个for
块。这仅在循环运行完成时执行代码,而不是由于使用break
而结束。这允许您避免使用found
变量(尽管它可能对以后的处理有用):
for element in someIterable:
if matchesCriteria(element):
print("Found")
break
else:
print("Not found")
某些语言具有可用于代替编写自己的循环的内置机制。
any
或some
函数,它接受一个回调函数,并返回一个布尔值,指示它是否对数组的任何元素都成功。find
或index
函数来搜索匹配元素。 如果您经常搜索,最好将数组转换为可以更有效搜索的数据结构。大多数语言提供set
和/或hash table
数据结构(后者根据语言有许多名称,例如关联数组,映射,字典),这些通常可在O(1)时间内搜索,扫描数组时是O(n)。