[英]I can't understand why it won't return True always, since the ''return True'' statement is outside the loop
[英]Why does return True have to be outside the if statement and the for loop?
我想看看 lst2 是否與 lst1 相反。
對於下面的代碼,為什么return True
必須在 if 語句之外。 當我把 else: return False 與 if 語句放在一起時,兩個打印都返回 True (這是不正確的)。 謝謝!
def reversed_list(lst1, lst2):
for index1 in range(len(lst1)):
if lst1[index1] != lst2[(-1 - index1)]:
return False
return True
print(reversed_list([1, 2, 3], [3, 2, 1]))
print(reversed_list([1, 5, 3], [3, 2, 1]))
如果您將它放入if
,即放入與return False
相同的條件,但在它之后,它將永遠不會被執行,因為該函數將始終保留第一個return
。 或者它將始終在if
內部執行,然后離開它,從而無意中覆蓋預期的False
。 這似乎就是你正在觀察的。
如果將它放入循環中(但在if
之外),它將在循環的第一次迭代期間執行,即太早了。
如果將它放入循環中,但使用else
,它仍然會過早執行。 在 not False
的第一種情況下。 這仍然不是您想要的,因為當循環中的任何地方都沒有False
時,您只想要True
,而不是在 not False
的第一種情況下。
如果循環完全通過而不觸發 False,您只想返回一個真正的布爾值。 你想要那個,否則你可能會錯過 False 的情況。
這就是為什么您在所示代碼中描述和使用的位置,在if
和循環之外,是唯一正確的方法。
這種方法比蠻力方法更輕巧。
使用蠻力,將第二個列表反轉,然后比較兩個列表的所有元素。 這浪費了很多資源,特別是如果列表很長的話。
Q 中提供的方法使用了一個指針,它基本上允許您“提前停止”。 不是對第二個列表進行排序,而是遍歷元素並比較它們。 如果它們匹配,則移至下一個元素。 如果它們不匹配,請盡早return False
並return False
。 使用這種方法,在比較列表中的所有元素之前,您無法返回True
。 (因此, return True
在 for 循環之外。)
return
語句立即停止函數或方法的執行。
這樣,您的函數在第一個差異處停止並返回False
。 如果所有測試元素都相等,則循環結束而不return False
語句並繼續下一個語句return True
。
我不確定這是否正是您所需要的,但這是一種檢查 l1 是否與 l2 反轉相同的方法。
l1 = [1, 2, 3]
l2 = [3, 2, 1]
l2.reverse()
if l1 == l2:
print("Yes")
else:
print("No")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.