[см. РЕДАКТИРОВАТЬ ниже] Я думаю, вам нужен еще один генератор в цепочке, если это то, что вы ищете, система преобразования типов (или проверки?)?
def mapper(typedefs, target):
igen = (i for i in typedefs)
item_types = (type(i) for i in igen)
return map(next(item_types), target)
, тогда если вы скажете:
list(mapper(['a','b','c'],[1,2,3]))
Вы получите:
['1','2','3']
Однако при обратном преобразовании будут возникать исключения ValueError.
[EDIT]: это неверно выше. Это выглядит хорошо:
def foo(types, target):
if len(types) == len(target):
gen1 = (type(i) for i in types)
gen2 = ([i] for i in target) #key is make this a list
gen3 = (next(map(next(gen1),next(gen2))) for _ in types)
yield from gen3
Теперь мы получаем преобразование типов по элементам (попытки):
bar = foo(['a',True,3.14,1],[1,1,1,1]))
list(bar)
['1',True,1.0,1]