我想创建一个函数,如果列表包含两个连续的 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)
另一个内置any
python的解决方案:
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
如果您发现current
和item
都等于 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