Суммирование из подсписка - PullRequest
0 голосов
/ 27 июня 2018

Если 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 голосов
/ 27 июня 2018

Если вы беспокоитесь о производительности, вам следует использовать определенные библиотеки, такие как numpy. Это будет намного быстрее!

0 голосов
/ 27 июня 2018
A = [17,12,10,2,7,11,20,8]
n = 4
m = 3

score = 0

for _ in range(m):
  sublist = A[:n] + A[-n:]
  subidx = [x for x in range(n)] + [x for x in range(len(A) - n, len(A))]
  sub = zip(sublist, subidx)
  maxval = max(sub, key=lambda x: x[0])
  score += maxval[0]
  del A[maxval[1]]

print(score)

Ваш метод использует много вызовов max (). Объединение срезов переднего и заднего списков позволяет сократить количество этих поисков max () до одного прохода, а затем второго прохода, чтобы найти индекс, по которому это происходит для удаления из списка.

0 голосов
/ 27 июня 2018

Я хотел бы сделать это таким образом, вы можете обобщить это позже:

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)
...