【发布时间】:2018-08-27 15:18:03
【问题描述】:
这是超级糟糕和混乱,我是新手,请帮助我。
基本上,我试图从一个列表中找到两个加起来为目标数字的数字。
我已经使用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))
【问题讨论】:
-
4和4在您的示例中是一个解决方案吗? -
这不是更适合CodeGolf或Code Review论坛吗?
-
@Ev.Kounis,是的,但在这种情况下,我尽量不添加它的编号。
-
您的代码几乎完全针对问题。如果列表的长度不同怎么办?你的代码不起作用。像这样命名一堆特定的变量几乎不是一个好主意。您需要以有组织的、通用的方式进行。为了让您入门,请尝试以下操作:
for a, b in permutations(numbers, 2):。顺便说一句:这里使用组合更合适,因为加法的顺序无关紧要。 -
别担心,这是一个常见的错误,像你一样尝试用
permutations(或组合)做一些事情实际上是一个很好的 Pythonic 方法,很多新人不会不考虑。为了将来参考(不一定针对这个问题),制作大量这样的变量的正确方法涉及制作一个名为例如的列表。result然后将值放入result[0]、result[1]等等。
标签: python for-loop permutation