Как составить новый список кортежей, соответствующих требованию - PullRequest
0 голосов
/ 01 июля 2019

У меня есть список таких кортежей:

list1 = [(pos.number, type, kind),
         (12, fruits, big-bananas), 
         (0, fruits, big-bananas), 
         (0, fruits, big-bananas), 
         (0, fruits, big-bananas), 
         (15, fruits, small-bananas), 
         (0, fruits, small-bananas), 
         (81, fruits, oranges),
         (0, fruits, oranges),
         (0, fruits, oranges),
         (93, fruits, kiwis)
        ]

Каждый кортеж состоит из номера позиции, типа продукта и вида продукта.Первое появление продукта каждого вида имеют уникальные поз.число, все другие появления имеют 0 вместо поз.число

Я хотел бы составить новый список кортежей с измененным полем типа.Мне нужно сделать, чтобы первая строка того же вида была фруктовой первой, последняя строка - фруктовой последней, а все строки посередине - помечены фруктами-мед.

Вот список желаемых результатов:

res = [(pos.number, type, kind), 
       (12, fruits-first, big-bananas), 
       (0, fruits-med, big-bananas), 
       (0, fruits-med, big-bananas), 
       (0, fruits-last, big-bananas), 
       (15, fruits-first, small-bananas), 
       (0, fruits-last, small-bananas), 
       (81, fruits-first, oranges),
       (0, fruits-med, oranges),
       (0, fruits-last, oranges),
       (93, fruits-first, kiwis)
      ]

Я нашел уродливое рабочее решение.

Сообщество Hope может помочь улучшить его и сделать его более " Pythonic "

current_kind = ""
current_product_list = []
new_product_list = []
for item in list1:
    if item[0] != 0 and current_kind == "":
        current_kind == "item[-1]"
        current_product_list.append(item)
    if item[-1] == current_kind:
        current_product_list.append(item)
    if item[0] != 0 and current_kind != "" and len(current_product_list) > 1:
        pos, type, kind = current_product_list.pop(0)
        new_product_list.append((pos, "fruits-first", kind))
        pos, type, kind = current_product_list.pop()
        new_product_list.append((pos, "fruits-last", kind))
        for line in current_product_list:
            pos, type, kind = line
            new_product_list.append((pos, "fruits-med", kind))
            current_product_list.pop()
        current_kind = item[-1]
        current_product_list.append(item)
print("New product list: ", new_product_list)
...