擅长:python、mysql、java
<p>这里有一个解决方案,已经留下足够的意见,以便于理解。您可以用基于文件的读取来替换硬编码的数据列表</p>
<pre><code>import itertools
from functools import reduce
MAX_WEIGHT = 100
#You can read data from files in for loop
csv5 = [('JonnyM',54,20), ('SallyR',35,18), ('MeganP',33,25)]
csv6 = [('HansM',18,20), ('JohnD',35,18)]
csv7 = [('MatG',30,25), ('BossT',36,26)]
args = []
for i in range(5, 8):
exec('args.append(csv%s)'%i)
result = []
#get cartesian product of these lists
for combinedList in itertools.product(*args):
#only those that are below the MAX_WEIGHT could be part of solution
if reduce(lambda a, b: a+b, [e[1]
for e in combinedList], 0) <= MAX_WEIGHT:
result.append(combinedList)
result.sort(key=lambda x:
reduce(lambda a, b:a+b, [e[2] for e in x], 0),
reverse=True)
#for r in result:
# print(r)
#First element will have max score hence the solution
print('Desired Solution:' )
print(result[0] )
</code></pre>