[英]Check if there are three numbers in the list that add up to target
我需要創建一個函數,該函數將一個正數列表和一個正數目標作為輸入,如果列表中有三個數字加到目標中,則返回True
。
到目前為止,我已經提出了:
def subsetSum(l, sum):
found = False
for i in range(len(l) - 2):
for j in range(i + 1, len(l) - 1):
for k in range(j + 1, len(l)):
return True
return found
替換:
>>> subsetSum([5, 4, 10, 20, 15, 19], 38)
True
因此4、15和19的總和等於38,這是我的目標。 當我運行此代碼時,結果為True
。
但是,當我運行以下代碼時,它仍然顯示為True
,盡管數字列表中沒有三個數字加起來等於目標,即10。
>>> subsetSum([5, 4, 10, 20, 15, 19], 10)
True
使用itertools.combinations
可能是最簡單,最有效的解決方案:
from itertools import combinations
def subset_sum(lst, target):
return len(lst) > 2 and any(sum(x) == target for x in combinations(lst, 3))
例子:
>>> subset_sum([5, 4, 10, 20, 15, 19], 38)
True
>>> subset_sum([10], 38)
False
萬一您想堅持自己的代碼,可以通過以下方法解決:
def subset_sum(l, target):
if len(l) < 3:
return False
for ki, i in enumerate(l):
for kj, j in enumerate(l):
for kk, k in enumerate(l):
# To make sure we sum elements ONLY on different positions
if kk != kj and kk != ki and kj != ki and i + j + k == target:
return True
return False
這個解決方案不是很快,但是可以。
您總是返回True。 由於python可以在一個函數中處理多個return語句,因此不需要找到的變量。 擺脫發現,最后返回False。 您需要一個if語句來比較sum和輸入值,當滿足條件時返回True,否則返回False。 現在,您的代碼本質上是返回True的一種復雜方式,您只是在抽象值中進行迭代,而不是將這些值分配給任何值,然后在返回found之前返回True。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.