gpt4 book ai didi

python - 找出 4 个数字,其总和为给定的数字

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:00 25 4
gpt4 key购买 nike

需要从列表中找到 4 个数字,其总和将等于给定的“sum_”

def find_four(nums, sum_):
if len(nums) < 4:
return
i = 0
i2 = 1
i3 = 2
i4 = 3
while True:
num_sum = nums[i] + nums[i2] + nums[i3] + nums[i4]
if num_sum == sum_:
return [nums[i], nums[i2], nums[i3], nums[i4]]
elif i == len(nums) - 4:
return
elif i2 == len(nums) - 3:
i += 1
elif i3 == len(nums) - 2:
i2 += 1
elif i4 == len(nums) - 1:
i3 += 1
elif i4 != len(nums):
i4 += 1

我的代码适用于某些列表,例如:find_four([1, 1, 1, 5, 1, 5, 7], 10)find_four([4, 6, 1, 4, 1, 6, 2], 13)。但它不适用于某些例如'find_four([7, 5, 1, 4, 1, 6, 2], 11)(需要打印7, 1, 1, 2)怎么了 ?? :(

最佳答案

没有理由使用嵌套循环。

import itertools
import operator as op
from functools import reduce

def find_N(nums, target, N=4):
for combo in list(itertools.combinations(nums, N)):
if reduce(op.add, combo) == target:
return combo
return []

>>> find_N([1,2,3,4,5,6,7,8], target=10)
(1, 2, 3, 4)

>>> find_N([1,2,3,4,5,6,7,8], target=10, N=3)
(1, 2, 7)

>>> find_N([1,2,3,4,5,6,7,8], target=10, N=2)
(2, 8)

观察:

  • 许多东西都是用 Python 预先构建的,使用它们而不是重新造轮子
  • 概括性很好。如果 N 从 4 改变,你不想改变你的功能
  • sum 不是一个合理的变量名,因为它破坏了该名称的内置函数

关于python - 找出 4 个数字,其总和为给定的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com