给定一个整数列表,如果数组在某处的 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条件。无论哪种情况,您都在只检查前 2 个元素后点击return语句。

在底部代码中,只有在找到某些内容时,或者完成整个循环后,您才会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)

另一个内置anypython的解决方案:

def has_33(l):
return any(l[i+1] == l[i] == 3 for i in range(len(l) - 1))

这段代码有效,因为如果 if 条件为 false,它不会返回任何内容,但在第一个函数中,您显示它返回 false 并退出函数。在某处发现它是正确的之前,您不应该返回任何内容,只有在您遍历整个列表之后,才应该返回False

def has_33(x):
for i in range(len(x)-1):
if x[i:i+2] == [3,3]:
return True
return False

您可以直接迭代列表。

def has_33(x):
current = None
for item in x:
if current == item == 3:
return True
current = item
return False

如果您发现currentitem都等于 3,您可以立即返回True。否则,您将在循环自然退出时返回False

如果同时遍历相邻条目,则可以比较:

def adjacent_threes(x):
for a, b, in zip(x[:-1], x[1:]):
if a == b == 3:
return True
return False

试试这个,很简单:

def has_33(nums):
for i,num in enumerate(nums):
if nums[i]==3 and nums[i+1]==3:
return True
return False

python代码如下:

def has_33(nums):
my_list = []
y =len(nums)-1
for x in range(0,y) :
if nums[x] == 3 and nums[x+1] == 3:
my_list.append(1)
else :
my_list.append(0)
print(my_list)
if 1 in my_list:
return True
else :
return False

相关内容

  • 没有找到相关文章

最新更新