python - 给定一个整数列表,如果数组在某处的某个 3 旁边包含一个 3,则返回 True
问题描述
我想创建一个函数,如果列表包含两个连续的 3,则返回 True,否则返回 false。使用此代码时它不起作用:
def has_33(x):
for i in range(len(x)-1):
if x[i:i+2] == [3,3]:
return True
else:
return False
但是有了这个它可以工作:
def has_33(x):
for i in range(len(x)-1):
if x[i:i+2] == [3,3]:
return True
return False
对我来说,这是同样的事情,你能向我解释一下为什么吗?
解决方案
在顶部代码中,您只检查前 2 个索引。在底部代码中,您正在检查整个数组。原因如下:
在上面的代码中,您有一个else
条件,这意味着在第一次迭代中,要么if-condition
为真(即列表的第一个和第二个元素为 3),要么您将进入该else
条件。在任何一种情况下,您都会return
在仅检查前 2 个元素后点击语句。
在底部代码中,只有return
当你找到一些东西,或者一旦你完成了整个循环
我已经为您的两个函数添加了一些打印语句。您可以运行此代码并查看输出以帮助您了解正在发生的事情:
def has_33_incorrect(x):
print("\nRunning the incorrect function")
for i in range(len(x)-1):
print("Checking indices {} and {}".format(i, i+1))
if x[i:i+2] == [3,3]:
print("indices contain 2 consecutive 3's. Returning true")
return True
else:
print("indices don't contain 2 consecutive 3's. Returning false")
return False
def has_33_correct(x):
print("\nRunning the correct function")
for i in range(len(x)-1):
print("Checking indices {} and {}".format(i, i+1))
if x[i:i+2] == [3,3]:
print("indices contain 2 consecutive 3's. Returning true")
return True
print("Did not find consecutive 3's. Returning false")
return False
list = [1, 2, 4, 5, 6, 3, 3, 2, 5]
has_33_incorrect(list)
has_33_correct(list)
推荐阅读
- java - 如何通过 Builder Pattern 强制设置参数的顺序
- llvm - 哪些情况会导致 LLVM IR 中的“使用指令不是指令”?
- java - 在二维数组上移动数据
- java - 如何从 JAVAFX 的 tableview 中选择多个项目?
- php - PHP 让 URL 看起来更漂亮
- javascript - 动态呈现一组问题(作为 API 响应接收),以及每个问题下的文本字段和单选按钮
- c# - 如何使用dotnet twain api到epson plqcs22存折打印机打印行
- javascript - React native firebase,从基于字段的文档中获取数据?
- drools - Optaplanner Value Range Provider 没有被调用
- angular - Angular 单元测试中有关茉莉花时钟的一些错误