wor*_*bin 2 python iteration iterator iterable
迭代迭代器时我想避开最终项目并停在倒数第二项 - 我该怎么做?
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)
Run Code Online (Sandbox Code Playgroud)
注意 -
for prod in product_list[:-1] : 为了避免使用最后一项(但不要避免拉动最后一项,这通常是不可能的),你可以这样做:
def skip_last(seq):
it = iter(seq)
p = next(it)
for n in it:
yield p
p = n
>>> print (''.join(skip_last('ABCDE')))
'ABCD'
Run Code Online (Sandbox Code Playgroud)
这是一个生成器,它将迭代序列并生成除最后一个项目之外的所有项目.