子清单汇总

时间:2018-06-27 11:01:37

标签: python list sublist

如果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 )

3 个答案:

答案 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()搜索的次数减少到一次通过,然后再减少一次以找到从列表中删除该索引的索引。