Функция Python для дробления цифр многих кортежей, содержащихся в списке - PullRequest
0 голосов
/ 03 июля 2018
> AA = [('JAMES', 124), ('KATE', 78), ('MARIE', 62), ('NGUYEN', 59)]
> 
> BB = [('JACK', 133), ('JILL', 68), ('SARAH', 67), ('MARGARITA', 66),
> ('NATE', 66), ('DANI', 55)]
> 
> CC =[('MARYLOU', 155), ('PETER', 98), ('ALEXA', 57), ('MARK', 54),
> ('KAREN', 34)]

У меня много списков (AA, BB и CC), содержащих кортежи, содержащие строку и соответствующую цифру.

Для каждого списка (например, AA, BB и CC) я хочу, чтобы функция принимала наибольшую цифру (124 в списке AA) в этих кортежах за 1 и выводила оставшиеся цифры всех других кортежей в том же самом перечислите как часть самой высокой цифры среди кортежей (78/124 = 0,63). Доли должны быть 2 десятичных знака.

Целевой выход

AA = [('JAMES', 1), ('KATE', 0.63), ('MARIE', 0.5), ('NGUYEN', 0.48)]

BB = [('JACK', 1), ('JILL', 0.51), ('SARAH', 0.5), ('MARGARITA', 0.5), ('NATE', 0.5), ('DANI', 0.41)]

CC =[('MARYLOU', 1), ('PETER', 0.63), ('ALEXA', 0.37), ('MARK', 0.35), ('KAREN', 0.22)]

Пожалуйста, предложите советы по решению этой проблемы.

Пока что я составил рейтинг кортежей внутри каждого списка.

def rank(L): #to sort tuples inside the List by the value inside the tuples
    L = L.sort(reverse = True, key = lambda x : x[1])

1 Ответ

0 голосов
/ 03 июля 2018

Вот несколько советов:

  • Найти максимальное значение в каждом списке. Вы можете сделать это, отсортировав его по второму значению.
  • Перебрать список и разделить каждое число на значение, которое вы получили выше
  • Используйте округлить (значение, 2), чтобы округлить до 2 десятичных знаков

Если вы не можете его получить, это должно помочь вам в шагах 2 и 3:

EDIT:

AA = [('JAMES', 124), ('KATE', 78), ('MARIE', 62), ('NGUYEN', 59)]

def rank(L):
    L.sort(reverse = True, key = lambda x : x[1])
    return L

def normalize(L):
    L = rank(L)
    newlist = []    #The new list
    for i in L:     #Iterate through the sorted list
        newtuple = (i[0],)    #Copy the name as is
        newtuple += (round(float(i[1])/L[0][1],2),)  #Divide by the largest value and round to 2 decimal places
        newlist.append(newtuple)    #Add it to the new list
    return newlist

AA = normalize(AA)
print AA
#[('JAMES', 1.0), ('KATE', 0.63), ('MARIE', 0.5), ('NGUYEN', 0.48)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...