У меня есть список таких кортежей:
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)