Python 3.x “有什么用?”;而不是",;用Python?
为什么没有“和找不到”代码就不能工作。这句话有什么用Python 3.x “有什么用?”;而不是",;用Python?,python-3.x,Python 3.x,为什么没有“和找不到”代码就不能工作。这句话有什么用 def BinarySearch(alist, item): first=0 last=len(alist)-1 found=False while first<=last and not found: midpt= (first+last)//2 if alist[midpt] == item: found=True else: if item < alist
def BinarySearch(alist, item):
first=0
last=len(alist)-1
found=False
while first<=last and not found:
midpt= (first+last)//2
if alist[midpt] == item:
found=True
else:
if item < alist[midpt]:
last=midpt-1
else:
first=midpt+1
return(found)
alist=[1,2,3,4,5]
item=8
print(BinarySearch(alist,item)
def二进制搜索(列表,项目):
第一个=0
last=len(alist)-1
发现=错误
首先,它不是一个语句,而是一个表达式(实际上是三个表达式*)
如果删除且未找到
部分,则搜索在找到该项目时不会停止,它将继续进行,直到到达末尾。对于和notfound
,它在找到项目时停止
在您的情况下,因为您正在列表中查找找不到的内容(8
),所以没有任何区别。但是如果你寻找,比如说,3
,它会
*不必要的细节:
访问变量是一个表达式,其结果是该变量包含的值,因此和中的找到
是一个表达式
非v1
(其中v1是来自#1的值)是第二个表达式:它接受给定值并对其求反
v0和v2
(其中v2是来自#2的值,v0是之前表达式的结果,未找到
)是第三个表达式:当两个操作数都为真时,其结果为真,否则为假
found
是一个布尔标志,用于指示您是否找到了一直在寻找的项目。一旦你找到了它,继续寻找它就没有意义了,你应该把它退回
可以说,一个更简洁的实现是使用早期返回范式,在找到项目后只返回True
:
def BinarySearch(alist, item):
first = 0
last = len(alist) - 1
while first<=last:
midpt = (first+last)//2
if alist[midpt] == item:
return True
if item < alist[midpt]:
last = midpt - 1
else:
first = midpt + 1
return False
def二进制搜索(列表,项目):
第一个=0
last=len(alist)-1
首先,理解这类事情(而不是阅读)的最佳方法是使用调试器逐个语句地遍历代码语句。如果您使用和不使用和not found
,并且在上面的测试用法中将项从8
更改为3
,您将看到差异;您可以删除和未找到
,将找到=真
替换为返回真
,将返回(找到)
替换为返回假
;标准库模块在C代码中实现对分,只需pos=bisect.bisect(alist,item)
,然后返回pos
。