Сравните один список с несколькими списками - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть 2 списка, один содержит 4 списка, а другой имеет категории. Я хочу сравнить список категорий с каждым списком и суммировать значения, которые имеют одинаковые категории. Я попробовал этот способ, но он возвращает список из 8 значений вместо 4.

lists=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3],[ 10, 15, 3, 3, 0, 0,5, 3, 3, 90], [0, 0, 0, 15, 0, 15, 180, 0, 90, 0]]
cat=['alpha','beta','gama','beta','beta','alpha','alpha','beta','gama','beta']
for list in lists:
    for n in range(0,10):
        if cat[n]=='alpha':
            cta= list[n]
            ct1.append((sum([cta])))
        elif cat[n]=='beta':
            ctb = list[n]
            ct2.append((sum([ctb])))
        else:
            ctc = list[n]
            ct3.append((sum([ctc])))
print(ct3)
[0, 0, 0, 0, 3, 3, 0, 90]

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Попробуйте это:

for lst in lists:
    cta, ctb, ctc = [], [], []
    for n in range(0,10):
        if cat[n]=='alpha':
            cta.append(lst[n])
        elif cat[n]=='beta':
            ctb.append(lst[n])
        else:
            ctc.append(lst[n])
    ct1.append(sum(cta))
    ct2.append(sum(ctb))
    ct3.append(sum(ctc))
1 голос
/ 23 апреля 2020

Вы можете использовать dict из list для отслеживания материала вместо list из list:

lists=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3],[ 10, 15, 3, 3, 0, 0,5, 3, 3, 90], [0, 0, 0, 15, 0, 15, 180, 0, 90, 0]]
cat=['alpha','beta','gama','beta','beta','alpha','alpha','beta','gama','beta']

result = {k: [0] * len(lists) for k in dict.fromkeys(cat).keys()}
for i, l in enumerate(lists):
    for x, c in zip(l, cat):
        result[c][i] += x
print(result)
# {'alpha': [0, 0, 15, 195], 'beta': [0, 3, 111, 15], 'gama': [0, 0, 6, 90]}
...