Обратите внимание на модуль itertools и связанные с ним рецепты. Похоже, вы хотите рассмотреть декартово произведение всех возможных POS-назначений. Это легко сделать, хотя удобнее, чтобы все элементы INPUT были списками, даже если они только списки из одного. В любом случае:
>>> import itertools
>>>
>>> INPUT = ["DET", "NOUN", ["VERB", "NOUN"], "CONJ", ["ADJ", "ADV", "NOUN"], "ADV"]
>>>
>>> I = [[kind] if type(kind) != list else kind for kind in INPUT]
>>> I
[['DET'], ['NOUN'], ['VERB', 'NOUN'], ['CONJ'], ['ADJ', 'ADV', 'NOUN'], ['ADV']]
так что это те возможности, которые мы хотим выбрать. Вот для чего itertools.product
:
>>> possible_assignments = list(itertools.product(*I))
>>> possible_assignments
[('DET', 'NOUN', 'VERB', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'VERB', 'CONJ', 'NOUN', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADJ', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'ADV', 'ADV'), ('DET', 'NOUN', 'NOUN', 'CONJ', 'NOUN', 'ADV')]
что, если я вас понимаю, то, что вы хотите. Ну, это кортежи, а не списки, но это не должно иметь значения.