问题:
1. 我需要在array2中找到三个数字,使它们的和等于或尽可能接近array3中的每个数字(必须是三个数字)。 2. 打印出使用array2中每个数字对应的list1中的索引。 3. 只能使用array2中的每个数字两次。
数据:我有一个列表和两个数组的三个数据集。第一个列表是名称,第二个数组是数字,第三个数组是目标。list1和array2的长度相同(55),但array3的长度不同。
我所需要的结果如下:
对于数组array3中的80,使用39+38+3,从list1中获取“ab”,“ae”和“ak”。
对于数组array3中的74,使用39+32+2,从list1中获取“ab”,“cg”和“ek”。
我正在尝试找到一种Pythonic方式来解决这个问题,使用Python 3.x。我已经研究过itertools.combinations/permutations和背包问题。背包问题最接近解决此问题,但需要评估两个值以获得针对目标的最佳解决方案,而我只需要一个。
我不是在寻找某人为我编写代码(如果你想的话,我也不会阻止你),而是在寻找比我更有经验的人指导我解决这个问题的方向。
1. 我需要在array2中找到三个数字,使它们的和等于或尽可能接近array3中的每个数字(必须是三个数字)。 2. 打印出使用array2中每个数字对应的list1中的索引。 3. 只能使用array2中的每个数字两次。
数据:我有一个列表和两个数组的三个数据集。第一个列表是名称,第二个数组是数字,第三个数组是目标。list1和array2的长度相同(55),但array3的长度不同。
list1 = ['ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai', 'aj', 'ak',
'bc', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bk', 'cd', 'ce',
'cf', 'cg', 'ch', 'ci', 'cj', 'ck', 'de', 'df', 'dg', 'dh', 'di',
'dj', 'dk', 'ef', 'eg', 'eh', 'ei', 'ej', 'ek', 'fg', 'fh', 'fi',
'fj', 'fk', 'gh', 'gi', 'gj', 'gk', 'hi', 'hj', 'hk', 'ij', 'ik',
'jk']
array2 = [39, 6, 29, 38, 2, 34, 7, 6, 2, 3, 37, 13, 20, 18, 4, 14,
28, 2, 20, 25, 13, 38, 32, 28, 9, 7, 14, 11, 31, 29, 29, 39, 9, 35,
14, 34, 23, 31, 11, 2, 37, 19, 18, 6, 5, 12, 6, 33, 30, 22, 38, 37,
13, 31, 40]
array3 = [80, 74, 84, 89, 89, 78, 79, 85, 81, 89, 75, 86, 76, 71,
82, 79, 75, 78, 83, 89]
我所需要的结果如下:
对于数组array3中的80,使用39+38+3,从list1中获取“ab”,“ae”和“ak”。
对于数组array3中的74,使用39+32+2,从list1中获取“ab”,“cg”和“ek”。
我正在尝试找到一种Pythonic方式来解决这个问题,使用Python 3.x。我已经研究过itertools.combinations/permutations和背包问题。背包问题最接近解决此问题,但需要评估两个值以获得针对目标的最佳解决方案,而我只需要一个。
我不是在寻找某人为我编写代码(如果你想的话,我也不会阻止你),而是在寻找比我更有经验的人指导我解决这个问题的方向。
array2
中的数字可以为每个array3
中的数字使用两次,还是总共只能使用两次?后者比较复杂。 - Davis Herringarray2
中的数字每个只能在array3
中使用一次,且总共只能用两次。 @RockyLi 不幸的是,array3
中的计数可以超过100,但我想知道您如何解决这个问题。 @KlausD. 我尝试过修改背包函数来仅使用“价值”或“重量”之一,但问题在于它需要一个“值”和一个“重量”才能工作。这让我觉得我可能在错误的方向上解决问题,因此我在这里向聪明的您寻求解决方法的建议。 - imclallen