Суммируйте связанные значения из списка в Python - PullRequest
0 голосов
/ 26 февраля 2019

Вот значения, печатаемые из записи, мне нужно суммировать 1-е число, когда оно основано на втором числе.Если первые вторые числа совпадают, необходимо добавить первое число.

record = [[2, 3], [3, 3], [5, 4], [1, 4]]

Expected output = [5, 3], [6, 4]]

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Алгоритм: 1. Сортировка списка по второму элементу во внутреннем списке.2. Объедините последовательный элемент, подняв то же значение второго элемента.

record = [[1,5],[2, 3], [2,5] , [3, 3], [5, 4], [1, 4]]
record.sort(key=lambda x: x[1]) #sorting record according to second value in inner list
length=len(record)
newRecord=[record[0].copy()] #initating newRecording with first value from record
for i in range(1,length):
    if newRecord[-1][1]==record[i][1]:
        #if value of second element is equal than this will execute
        newRecord[-1][0]+=record[i][0]
    else:
        #if value of second element is not equal than this will execute
        newRecord.append(record[i])

print(newRecord)

Надеюсь, эта помощь.

0 голосов
/ 27 февраля 2019

Вы должны использовать Counter.Он будет прост в использовании, и вам не нужно ничего сортировать:

from collections import Counter
record = [[2, 3], [3, 3], [5, 4], [1, 4]]
sums = Counter()
for (value, index) in record:
    sums[index] += value
sums
# Counter({3: 5, 4: 6})

Не должно быть слишком сложно преобразовать значения счетчика в желаемый результат.

0 голосов
/ 26 февраля 2019

Сначала нужно отсортировать, затем itertools.groupby второе значение.

import itertools
import operator

records = [[2, 3], [3, 3], [5, 4], [1, 4]]
records.sort(key=operator.itemgetter(1))
groups = itertools.groupby(records, key=operator.itemgetter(1))
# groups is now a generator that produces the values:
#   (3, [[2, 3], [3, 3]])
#   (4, [[5, 4], [1, 4]])

Затем создать список результатов:

result = [[sum(record[0] for record in records), grpname] for grpname, records in groups]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...