擅长:python、mysql、java
<p>您可以使用<code>itertools.product</code>。还应使用<code>contextlib.ExitStack</code>关闭文件:</p>
<pre><code>from contextlib import ExitStack
import csv
import itertools
maxweight = 5000
bestscore = 0
bestcombo = []
with ExitStack() as stack:
files = [csv.reader(stack.enter_context(open("{}.csv".format(i))), delimiter=',') for i in range(5, 21)]
for combo in itertools.product(*files):
names, weight_list, score_list = zip(*combo)
weight = sum(map(int, weight_list))
score = sum(map(int, score_list))
if weight <= maxweight and score > bestscore:
bestcombo = names
bestscore = score
</code></pre>
<p>这是未经测试的(因为我没有访问文件的权限,也懒得合成有效的伪数据),所以如果出现错误,请告诉我。而且,这种方法相当幼稚,因此计算成本很高。你知道吗</p>