Python, соединяющий кортежи из цикла while в список - PullRequest
0 голосов
/ 15 мая 2018

Я перебираю большой список кортежей в форме

num_list = [('A15', 2, 'BC', 721.16), ('A21', 3, 'AB', 631.31), ('A42', 4, 'EE', 245.43)]

Я пытаюсь найти максимальный четвертый элемент каждого кортежа за период 5 значений для второго элемента для каждогодругое значение первого элемента, все различные значения первого элемента сохраняются в наборе с именем account_2 и выводят его в виде

ID   Max
A21  400
A15  489

Мой код ниже:

first_value = 1
fifth_value = 5
maximum = []    

while first_value <= 24 and fifth_value <= 28:
    for num_list[0][0] in account_2:
        result = max([i for i in num_list if i[1] <= fifth_value and i[1] >= first_value], key = lambda  x:x[3])
        maximum.extend(result)
        first_value += 1
        fifth_value += 1

IЯ думаю, что мне нужно заменить 1-ю 0 в num_list[0][0] для переменной, чтобы зациклить, так что она зацикливается на каждом кортеже в списке, но в моем тестировании только первый кортеж, т.е. в текущем случае я получаю ошибкуTypeError: 'tuple' object does not support item assignment.

Любая помощь будет принята с благодарностью.Заранее спасибо

1 Ответ

0 голосов
/ 15 мая 2018

Ошибка вызвана строкой

for num_list[0][0] in account_2:

, которая пытается присвоить значения от account_2 до numlist[0][0], в то время как numlist[0] - это кортеж, который является неизменным объектом.

Минимальное исправление будет:

while first_value <= 24 and fifth_value <= 28:
    for acc in account_2:
        try:
            result = max([i for i in num_list if i[1] <= fifth_value and i[1] >= first_value and i[0] == acc ], key = lambda  x:x[3])
        except ValueError:
            result = ()
        maximum.extend(result)
        first_value += 1
        fifth_value += 1

try: ... except... необходимо, потому что max вызывает ValueError, когда ему передается пустая последовательность.

...