簡體   English   中英

為什么 return True 必須在 if 語句和 for 循環之外?

[英]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 Falsereturn 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM