从列表中找到两个加起来为特定数字的数字

moo*_*hen 1 python for-loop permutation

这是超级糟糕和凌乱,我是新来的,请帮助我.

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

我已经设置了一个示例,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))
Run Code Online (Sandbox Code Playgroud)

Ev.*_*nis 7

对于列表中的每个数字,您可以查找他的补充(当添加到前一个数字时,将给出所需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")
Run Code Online (Sandbox Code Playgroud)

产生:

Solution Found: 2 and 6
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 您不必检查最后一个号码; 如果有一对,你会在那时找到它.
  2. 请注意,会员检查(列表中的成本非常高)已经过优化,因为它只考虑了切片numbers[i+1:].之前的数字已经过检查.切片的正面副作用是4列表中存在一个,不会给出目标值的一对8.
  3. 这是一个极好的设置来解释误理解并经常混淆使用elsefor-loops.在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")
Run Code Online (Sandbox Code Playgroud)

  • @moomoochen有吸引力的乐趣,如果有任何问题,我很乐意回答.干杯. (2认同)