2015-10-21 3 views
-4

Итак, список списков:Python - Сравнение 2-й элемент в списке списков

[['1', '1', 'tall', 8.425169446611104], ['1', '2', 'tall', 8.917085904771866],  ['1', '3', 'medium', 6.174348482965436], ['2', '1', 'short', 7.8163095871050965], ['2', '2', 'medium', 9.098197168204184], ['2', '3', 'medium', 7.889044875446846], ['3', '1', 'medium', 7.267435895701576], ['3', '2', 'medium', 2.270144244358967], ['3', '3', 'tall', 9.721626339195156], ['4', '1', 'medium', 8.242226639616785], ['4', '2', 'tall', 11.688990983183421], ['4', '3', 'medium', 5.326719989412714]] 

Так я попытаюсь объяснить, что я хотел бы сделать здесь:
Если вытащить два списки:

[ '1', '1', 'высокий', +8,425169446611104]
[ '2', '1', 'короткий', +7,8163095871050965]

Если второе значение в списке совпадение (в этом случае «1») с другим списком в списке y ou собираются взять последнее число (8.425169446611104) и + с другим (7.8163095871050965) и разделить его на количество чисел (2), чтобы получить среднее число.

[ '1', 'x', 'высокий', Y]
[ '2', 'x', 'короткий', Y]
TLDR: Если X'es имеют соответствие и затем добавить Y Давайте вместе и разделить его на сколько Y в есть (среднее Y) (Так что может быть более двух списков с одинаковым номером X)

Так что я хочу это Среднее значение Y, что имеет же X'es.

+1

Есть много способов сделать это. Какая у вас проблема с вашим путем? –

+0

Не знаете, с чего начать и заставьте его работать правильно:/ – Widdin

+2

Вы можете начать с рассказа нам, что вы сделали до сих пор? Любой код, который вы написали для этого? – blackmamba

ответ

-1

Try и скажите мне, если это то, что вы ищете для

list_v = [YOUR LIST HERE]  
previous_numbers = [] 
for x in list_v: 
    if x[1] not in previous_numbers: 
     division = 1 
     value = x[3] 
     for k in list_v: 
      if x!=k: 
       if x[1] == k[1]: 
        value += k[3] 
        division += 1 
     value = value/division 
     print x[1]," has medium value: ",value 
     previous_numbers.append(x[1]) 

ВЫВОД:

1 has medium value: 7.93778539226 
2 has medium value: 7.99360457513 
3 has medium value: 7.27793492176 

Не очень вещий, но он имеет преимущество быть читаемым новичками

0
from collections import defaultdict 

all_lists = [['1', '1', 'tall', 8.425169446611104], 
      ['1', '2', 'tall', 8.917085904771866], 
      ['1', '3', 'medium', 6.174348482965436], 
      ['2', '1', 'short', 7.8163095871050965], 
      ['2', '2', 'medium', 9.098197168204184], 
      ['2', '3', 'medium', 7.889044875446846], 
      ['3', '1', 'medium', 7.267435895701576], 
      ['3', '2', 'medium', 2.270144244358967], 
      ['3', '3', 'tall', 9.721626339195156], 
      ['4', '1', 'medium', 8.242226639616785], 
      ['4', '2', 'tall', 11.688990983183421], 
      ['4', '3', 'medium', 5.326719989412714]] 

sublists = defaultdict(list) 
for sublist in all_lists: 
    sublists[sublist[1]].append(sublist[3]) 

result = {key: sum(sublist)/len(sublist) 
      for key, sublist in sublists.items()} 

print result 
# {'1': 7.9377853922586405, '3': 7.277934921755039, '2': 7.993604575129609} 
+0

'all_lists' не определен, опечатка? –

+0

@DavidZemens Я предполагаю, что ОП определит его. –

+2

Я определенно не чувствовал бы себя в безопасности, делая это предположение, основанное на усилиях, продемонстрированных до сих пор, некоторые комментарии/объяснения в вашем ответе, вероятно, были бы полезны ... –

2

Это своего рода грубая сила, которую это можно сделать более эффективно. Я уверен, но это было бы хорошим местом для вас. o старт.

lists = [['1', '1', 'tall', 8.425169446611104], ['1', '2', 'tall', 8.917085904771866],  ['1', '3', 'medium', 6.174348482965436], ['2', '1', 'short', 7.8163095871050965], ['2', '2', 'medium', 9.098197168204184], ['2', '3', 'medium', 7.889044875446846], ['3', '1', 'medium', 7.267435895701576], ['3', '2', 'medium', 2.270144244358967], ['3', '3', 'tall', 9.721626339195156], ['4', '1', 'medium', 8.242226639616785], ['4', '2', 'tall', 11.688990983183421], ['4', '3', 'medium', 5.326719989412714]] 

# Creating a dictionary of each "second element" in the sublists and 
# compute the 'subtotal' for each of those values: 
d = dict() 
for i in range(len(lists)): 
    d[lists[i][1]] = lists[i][3] + d.get(lists[i][1], 0) 

# now do the division: 
for k in d.keys(): 
    count = len([l for l in lists if l[1] == k]) 
    print 'average for {} is {}'.format(k, d[k]/count) 

Это должно напечатать следующее:

{'1': 31.751141569034562, '3': 29.111739687020155, '2': 31.974418300518437} 

average for 1 is 7.93778539226 
average for 3 is 7.27793492176 
average for 2 is 7.99360457513 

enter image description here

+0

Dunno, я получаю это: d [list [i] [1]] = list [i] [3] + d.get (list [i] [1], 0) TypeError: не может объединить 'str' и ' int 'objects – Widdin

+0

Тогда ваши данные ** не **, как вы описали в вопросе, потому что я использовал ваши данные. В вашем списке нет данных 'int'. –

+0

Список [3] is 'int' – Mark

Смежные вопросы