2013-05-07 4 views
1

В настоящее время я работаю над проблемой python, которая включает в себя сбор списка из 2 подписок чисел и идентификатора для всего трех вещей. Название процедуры - compareTeams (lstTeams) и предназначено для вычисления среднего процентного процента команд в течение нескольких сезонов. Первый список - это выигранные игры, второй список - потерянные игры. Процедура, о которой идет речь, содержит список этих списков и пытается найти наивысший средний показатель, объединив игры, выигранные по общим играм, а затем погрузив их по длине списка. Оба списка имеют одинаковый размер. Затем он сортирует средние значения от максимального к наименее как пары списков, причем идентификатор помечен как первый элемент в каждом списке. Для того, чтобы привести пример:Python Сравнение средних значений по спискам

teamA = [[6, 4, 8, 5, 0], [3, 6, 0, 2, 4], 'A'] avg winning percentage = 0.56 

(в случае, если мое объяснение бедным и трудно следовать за teamA, процент рассчитывается как (6/9 + 4/10 + 8/8 + 5/7 + 0/4)/5)

teamB = [[3, 6, 8, 2, 4], [3, 6, 8, 2, 4], 'B'] avg winning percentage = 0.50 
teamC = [[3, 6, 8, 2, 4], [0, 0, 0, 0, 0], 'C'] avg winning percentage = 1 

compareTeams([teamA, teamB, teamC]) gives [['C', 1],['A', 0.56],['B', 0.50]] 

Я дал эту проблему хорошую сумму мысли, но я новичок в Python, так что я не уверен, если я правильно называя все. Используемый интерпретатор даже не отображает мою процедуру, когда я запускаю ее, что заставляет меня поверить, что я могу делать что-то неправильно. Вот мой код:

def compareTeams(lstTeams): 
    a = 0 
    x = 0 
    lst = [] 
    y = lstTeams[a] 
    for a in range(0, len(y)): 
    x = x + ((float(y[0][0])/(y[1][0]))/len(y[0])) 
    a = a + 1 
    lst.append(x) 
    return lst.reverse(lst.sort()) 

Это правильно? Я что-то делаю неправильно? Любая помощь будет принята с благодарностью.

ПРИМЕЧАНИЕ: Я использую python 2.7 для этого.

ответ

1

Вы можете использовать zip здесь:

def compare_team(teams): 
    lis = [] 
    for team in teams: 
     #zip fetches items from the same index one by one from the lists passed to it 
     avg = sum((x*1.0)/(x+y) for x,y in zip(team[0],team[1]))/ len(team[0]) 
     lis.append([team[-1],avg]) 

    lis.sort(key = lambda x:x[1],reverse = True) #reverse sort based on the second item 
    return lis 



>>> compare_team(([teamA, teamB, teamC])) 
[['C', 1.0], ['A', 0.5561904761904761], ['B', 0.5]] 
+0

Это прекрасно работает! Спасибо, Ашвини. Хотя, если я могу спросить, что здесь делает ключ и почтовый индекс? Я никогда не видел эти ключевые слова раньше. – CodeRook

+0

@Gabe См. Примеры некоторых zip в [docs] (http://docs.python.org/2/library/functions.html#zip). 'key' используется, чтобы сообщить функции сортировки, какое значение должно использоваться для сравнения элементов. Поэтому здесь я использовал второй элемент из каждого списка для сравнения. http://docs.python.org/2/howto/sorting.html –

+0

А, это имеет смысл с тем, что происходит тогда. Очень признателен. – CodeRook

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