Итерируя по итератору, я хотел бы избежать конечного пункта и остановиться на предпоследнем пункте - как мне это сделать?Как остановить повторение итератора на предпоследнем элементе?
from itertools import product
from collections import namedtuple
param_list = []
Parameter = namedtuple("Parameter", ['bad', 'good'])
param1 = Parameter(["peanut", "gluten"], ["bacon", "pickle"])
param_list.append(param1)
param2 = Parameter([0], [1, 22])
param_list.append(param2)
param3 = Parameter([0, 1], [2, 3, 4, 9])
param_list.append(param3)
param4 = Parameter(["football"], ["running", "yoga"])
param_list.append(param4)
for prod in product(*param_list): # -- I want to skip the last product --
for sub_prod in product(*prod):
prod = [str(x) if type(x) is not str else x for x in sub_prod]
print ", ".join(prod)
Примечание -
- param_list является переменной длины списка.
- Если бы это был список вместо итератора, я бы использовал
for prod in product_list[:-1] :
- Операция печати предназначена только для иллюстрации.
Вы не можете, потому что вы даже можете создавать бесконечные генераторы. – thefourtheye
Не хотите ли вы вытащить последний элемент из итерации (что вообще невозможно) или просто для того, чтобы избежать повторного использования последнего элемента? – khelwood
@ khelwood - Идеально подходит к самому себе; если это невозможно, просто обнаружите, что это последний элемент и не используйте его. –