2015-09-28 4 views
2

Если мне дают json.dumps (выход, который дает ответ, как следующее при фокусировке на конкретном аспекте ответа:Sum то средние значения в строке строк с использованием Python

[["player1-game1", 2,2,4,5],["player1-game2",6,8,8,9]] 

Я бы хотел бы иметь его выход среднего игрока один дало 2 или бесконечное количество игр

Какой код я должен использовать, чтобы получить среднее значение этих значений в этой строке:.

Я хотел бы, чтобы распечатать среднее значение элементов в [1], [2], ... но не в [0], поскольку оно строка.

Как я могу это сделать, используя Python 2.7; Я попытался использовать комбинацию для циклов, даже пытаясь установить какое-то значение в массив, если у меня были тысячи игроков или статистика.

Выход я надеюсь получить это:

[player-1, 4,5,6,7] 

Так [1, ...] является средним [ "игрок-1", (2 + 6)/2, (8+ 2)/2, (4 + 8)/2, (9 + 5)/2]

Извините, я должен был уточнить.

+0

Просто потому, что это потрясающе, в Python 3 (определенно, 3.5, и я думаю, что раньше), вы можете использовать распаковку, чтобы сделать раскол для вас; если 'orig' - это исходный список:' [(k, sum (score)/len (score)) для k, * score in orig] '. Распаковывание обобщений является удивительным. :-) – ShadowRanger

ответ

1

Один из подходов состоит в том, чтобы разрезать каждый список так, чтобы первый элемент всегда обрабатывался отдельно, а остальные элементы - как другой список. Как только вы это сделаете, вы можете легко извлечь его в среднем. Например, используя список понимание:

orig = [["player1-game1", 2,2,4,5], ["player1-game2",6,8,8,9]] 
result = [ [x[0], float(sum(x[1:]))/len(x[1:])] for x in orig] 
+0

Почему бы не 'result = [[x [0], float (sum (x [1:]))/len (x [1:])] для x in orig]'? – Sait

+1

@Sait хорошая точка, исправлена. Наверное, старые (читай: плохие) привычки умирают. – Mureinik

+0

Таким образом, я могу распечатать сумму/среднее из этих отдельных статистических данных с помощью print json.dumps (array [n] [24]), но я не хочу иметь 16 разных переменных, которые я установил в ноль, тогда 16 разных строки, которые печатают несколько другой stat, который находится в другом элементе массива. Я просто хочу сделать так, чтобы я мог печатать бесконечное количество статистических данных/средних значений для бесконечного количества игр. –

0

Вы можете использовать список Комп с внутренним GEX ехром, так что вы только нарезать каждый подсписок один раз, вы можете передать 0.0 в качестве начального значения к sum, так что вы можете избежать необходимости бросить в плавать для разделения.

l = [["player1-game1", 2,2,4,5],["player1-game2",6,8,8,9]] 

res = [[_nm, sum(_sub, 0.0)/len(_sub)] for _nm, _sub in ((sub[0],sub[1:]) for sub in l)] 

Выход:

[['player1-game1', 3.25], ['player1-game2', 7.75]] 

Если вы на самом деле пытаетесь получить средние попарные элементы из каждого Подсписка вы можете переставлять элементы:

from itertools import izip 
l = [["player1-game1", 2,2,4, 5],["player1-game2",6,8,8,9]] 
zipped = izip(*l) 
player = next(zipped) 
print([(a+b(/ 2.0 for a,b in zipped]) 
[4.0, 5.0, 6.0, 7.0] 

Если вы хотите добавить в список:

[player[0]]+[(a+b)/2.0 for a,b in zipped] 

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

+0

[["player-1-game1", "date", "win/loss", "y", "n", 1,2,3,4], ["player-1-game2", "date" , "win/loss", "y", "n", 1,2,3,4]], я бы сделал следующее: result = [[x [0: 5], float (sum (x [6:])))/len (x [6:])] для x in orig] Я пытаюсь напечатать среднее значение первого элемента в первом списке и во втором списке. Например: если бы это было так, я бы получил [player-1, 4,5,, 6,7] –

+0

Итак, вы хотите попарно, см. Редактирование –

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