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)
对于列表中的每个数字,您可以查找他的补充(当添加到前一个数字时,将给出所需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)
笔记:
numbers[i+1:].之前的数字已经过检查.切片的正面副作用是4列表中存在一个,不会给出目标值的一对8.else的for-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)
| 归档时间: |
|
| 查看次数: |
2257 次 |
| 最近记录: |