如果n = 4,m = 3,我必须从开始和结束的列表中选择4个元素(基本上是n个元素)。下面的示例列表是[17,12,10,2]和[2,11,20,8]。
然后在这两个列表之间,我必须选择最高价值的元素,此后必须从原始列表中删除该元素。
以上步骤必须执行m次,并取最高值元素的总和。
A = [17,12,10,2,7,2,11,20,8], n = 4, m = 3
O / P:20 + 17 + 12 = 49
我写了以下代码。但是,代码性能不佳,并且会浪费大量时间。你能帮忙吗?
A = [17,12,10,2,7,2,11,20,8]
m = 3
n = 4
scoreSum = 0
count = 0
firstGrp = []
lastGrp = []
while(count<m):
firstGrp = A[:n]
lastGrp = A[-n:]
maxScore = max(max(firstGrp), max(lastGrp))
scoreSum = scoreSum + maxScore
if(maxScore in firstGrp):
A.remove(maxScore)
else:
ai = len(score) - 1 - score[::-1].index(maxScore)
A.pop(ai)
count = count + 1
firstGrp.clear()
lastGrp.clear()
print(scoreSum )
答案 0 :(得分:1)
我想这样做,您可以稍后再概括:
a = [17,12,10,2,7,2,11,20,8]
a.sort(reverse=True)
sums=0
for i in range(3):
sums +=a[i]
print(sums)
答案 1 :(得分:1)
如果您担心性能,则应使用特定的库,例如numpy。这样会更快!
答案 2 :(得分:0)
(&>/dev/null script.sh &)
您的方法使用了很多max()调用。将前列表和后列表的片段组合在一起,可以将max()搜索的次数减少到一次通过,然后再减少一次以找到从列表中删除该索引的索引。