Skip to main content
 首页 » 编程设计

python之从列表中找出相加等于特定数字的两个数字

2025年05月04日9mate10pro

这是 super 糟糕和困惑的,我是新手,请帮助我。

基本上,我试图从列表中找到两个加起来等于目标数字的数字。

我已经用 lst = [2, 4, 6, 10] 和目标值 target = 8 设置了一个示例。此示例中的答案是 (2, 6) 和 (6, 2)。

下面是我的代码,但它又长又丑,我相信有更好的方法。你能看看我如何改进下面的代码吗?

from itertools import product, permutations 
 
numbers = [2, 4, 6, 10] 
target_number = 8 
 
two_nums = (list(permutations(numbers, 2))) 
print(two_nums) 
 
result1 = (two_nums[0][0] + two_nums[0][1]) 
result2 = (two_nums[1][0] + two_nums[1][1]) 
result3 = (two_nums[2][0] + two_nums[2][1]) 
result4 = (two_nums[3][0] + two_nums[3][1]) 
result5 = (two_nums[4][0] + two_nums[4][1]) 
result6 = (two_nums[5][0] + two_nums[5][1]) 
result7 = (two_nums[6][0] + two_nums[6][1]) 
result8 = (two_nums[7][0] + two_nums[7][1]) 
result9 = (two_nums[8][0] + two_nums[8][1]) 
result10 = (two_nums[9][0] + two_nums[9][1]) 
 
my_list = (result1, result2, result3, result4, result5, result6, result7, result8, result9, result10) 
print (my_list) 
 
for i in my_list: 
  if i == 8: 
print ("Here it is:" + str(i)) 

请您参考如下方法:

对于列表中的每个数字,您都可以寻找他的互补数字(当添加到前一个数字时将给出所需的 target 总和)。如果存在,则获取对并退出,否则继续。

这看起来像下面这样:

numbers = [2, 4, 6, 10] 
target_number = 8 
 
for i, number in enumerate(numbers[:-1]):  # note 1 
    complementary = target_number - number 
    if complementary in numbers[i+1:]:  # note 2 
        print("Solution Found: {} and {}".format(number, complementary)) 
        break 
else:  # note 3 
    print("No solutions exist") 

产生:

Solution Found: 2 and 6 

注意事项:

  1. 您不必检查最后一个号码;如果有一对,你到时候就已经找到了。
  2. 请注意,成员检查(在列表中成本很高)已优化,因为它仅考虑切片 numbers[i+1:]。以前的数字已经检查过了。切片的一个积极的副作用是列表中存在例如一个 4,不会为 8 的目标值提供一对。
  3. 这是一个很好的设置,可以解释 for 循环中 else 被误解且经常混淆的用法。 else 仅在循环未被 break 突然结束时触发。


如果例如 4 - 4 解决方案即使在 单个 4 中也是可以接受的您可以按如下方式修改列表:

numbers = [2, 4, 6, 10] 
target_number = 8 
 
for i, number in enumerate(numbers): 
    complementary = target_number - number 
    if complementary in numbers[i:]: 
        print("Solution Found: {} and {}".format(number, complementary)) 
        break 
else: 
    print("No solutions exist")