两个 Sum,将值从内部传递给函数调用?
Two Sum, Pass value from inside to function call?
我试图将总和满足目标的唯一对传递给函数调用。 python 有点新,所以让我知道如何修复它。
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList = (array[i], array[x])
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
您忘记了return结果
你的代码
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList = (array[i], array[x]) ##### THIS #####
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
我的代码
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
return (array[i], array[x]) ##### THIS ####
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
但这只是第一个结果,所以...
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
rsts = [] # save rsts hear
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
rsts.append((array[i], array[x])) # add answer to rsts
return -rsts
result = twoSum (array, target)
如果我们没有正确答案结果是一个空列表([]
),所以
if result != []: # changed -1 with []
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
我想这就是您要找的东西?
您需要将这些对添加到列表中,如果找到的话 return 它们。
此外,如果找到 none,我个人会 return 空列表而不是 -1,因为它们是不同的数据类型。
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
pairsList = []
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList.append((array[i], array[x]))
if len(pairsList) == 0:
return -1
else:
return pairsList
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
最 Pythonic 的实现方式是作为列表理解,它只是一行!
>>> [(a[i],a[j]) for i in range(0, len(a)-1) for j in range(i+1, len(a)-1) if a[i]+a[j]==target]
[(4, 5), (10, -1)]
(请注意,这有助于提前终止,但您可以只分割第 [0] 个元素。)
至于你的代码/功能方法,我会重写它(下次请在 CodeReview.SE 上而不是在 SO 上请求对工作代码的审查):
def two_sum (a, target):
for i in range(0, len(a)):
for j in range( i + 1, len(a)):
if a[i] + a[j] == target:
return (a[i], a[j])
return None
result = two_sum (a, target)
if result:
print ("the numbers sum to target", result)
else:
print ("result is not in range")
评论:
- 由于您将第一个索引称为 i,将第二个索引称为 j,而不是 x,这使得不清楚 x 是值还是索引
- 它比 return 更 Pythonic 到 return None 像 -1 这样的标记值。然后调用者可以只用
if result:
测试 return 的值,你不需要任何笨重的 if result != -1
或 if result is None
- 已将
twoSum
重命名为 two_sum
以遵循 Python 函数名称和变量的命名约定 (PEP-8):lower_case_with_underscores
- 请注意此实现会提前终止。但是,如果您只是将
return (a[i], a[j])
更改为 yield (a[i], a[j])
,这将使其成为一个按顺序 returns 所有(/任何)匹配元组的生成器。 (您需要将 return None
替换为 yield StopIteration
)
- 类似地,
totalOfTwo
将被称为 total_of_two
或 pair_sum
- 但
totalOfTwo
、pairsList
不需要声明临时变量,直接使用表达式即可
- 如果您来自 Java,建议您学习正确的 Python 术语。
pairsList
不是一个列表,它是一个元组。 array
不是一个数组,它是一个列表。但我只是称它为 a
.
- 注意我们只需要 运行 左索引
i
到 len(a)-1 而不是 len(a),因为我们知道我们需要 j 来索引一个元素在它的右边。
我试图将总和满足目标的唯一对传递给函数调用。 python 有点新,所以让我知道如何修复它。
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList = (array[i], array[x])
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
您忘记了return结果
你的代码
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList = (array[i], array[x]) ##### THIS #####
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
我的代码
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
return (array[i], array[x]) ##### THIS ####
return -1
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
但这只是第一个结果,所以...
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
rsts = [] # save rsts hear
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
rsts.append((array[i], array[x])) # add answer to rsts
return -rsts
result = twoSum (array, target)
如果我们没有正确答案结果是一个空列表([]
),所以
if result != []: # changed -1 with []
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
我想这就是您要找的东西?
您需要将这些对添加到列表中,如果找到的话 return 它们。
此外,如果找到 none,我个人会 return 空列表而不是 -1,因为它们是不同的数据类型。
array = [ 3, 4, 5, 9, 10, -1, 6 ]
target = 9
def twoSum (array, target):
pairsList = []
for i in range(0, len(array)):
for x in range( i + 1, len(array)):
totalOfTwo = array[i] + array[x]
if (totalOfTwo == target):
pairsList.append((array[i], array[x]))
if len(pairsList) == 0:
return -1
else:
return pairsList
result = twoSum (array, target)
if result != -1:
print ("the intergers numbers meet target", result)
else:
print ("result is not in range")
最 Pythonic 的实现方式是作为列表理解,它只是一行!
>>> [(a[i],a[j]) for i in range(0, len(a)-1) for j in range(i+1, len(a)-1) if a[i]+a[j]==target]
[(4, 5), (10, -1)]
(请注意,这有助于提前终止,但您可以只分割第 [0] 个元素。)
至于你的代码/功能方法,我会重写它(下次请在 CodeReview.SE 上而不是在 SO 上请求对工作代码的审查):
def two_sum (a, target):
for i in range(0, len(a)):
for j in range( i + 1, len(a)):
if a[i] + a[j] == target:
return (a[i], a[j])
return None
result = two_sum (a, target)
if result:
print ("the numbers sum to target", result)
else:
print ("result is not in range")
评论:
- 由于您将第一个索引称为 i,将第二个索引称为 j,而不是 x,这使得不清楚 x 是值还是索引
- 它比 return 更 Pythonic 到 return None 像 -1 这样的标记值。然后调用者可以只用
if result:
测试 return 的值,你不需要任何笨重的if result != -1
或if result is None
- 已将
twoSum
重命名为two_sum
以遵循 Python 函数名称和变量的命名约定 (PEP-8):lower_case_with_underscores - 请注意此实现会提前终止。但是,如果您只是将
return (a[i], a[j])
更改为yield (a[i], a[j])
,这将使其成为一个按顺序 returns 所有(/任何)匹配元组的生成器。 (您需要将return None
替换为yield StopIteration
) - 类似地,
totalOfTwo
将被称为total_of_two
或pair_sum
- 但
totalOfTwo
、pairsList
不需要声明临时变量,直接使用表达式即可 - 如果您来自 Java,建议您学习正确的 Python 术语。
pairsList
不是一个列表,它是一个元组。array
不是一个数组,它是一个列表。但我只是称它为a
. - 注意我们只需要 运行 左索引
i
到 len(a)-1 而不是 len(a),因为我们知道我们需要 j 来索引一个元素在它的右边。