Как создать комбинации нескольких списков без повторений?
Подскажите, пожалуйста, как в python создать комбинации слов из нескольких списков но не комбинировать собственные слова каждого списка. Пока придумал только с помощью itertools, но много лишних комбинаций.
import itertools
form = ['A', 'B', 'C']
style = ['D', 'E', 'F']
material = ['G', 'H', 'I']
color = ['J', 'K', 'L']
special = ['M', 'N', 'O']
results = itertools.combinations(form + style + material + color + special, 5)
for item in results:
print(''.join(item))
Т.е. после вывода должно получиться что-то такое:
A D G J M
A E G J M
A F G J M
и т.д., но не должно получиться:
A B C D E
A B C D F
A B C D G
и т.д.
Каким-то образом этот код стал резать вывод:
def f(*iterables):
if len(iterables) == 1:
yield from iterables[0]
return
for letter in iterables[0]:
for n in f(*iterables[1:]):
yield letter + "+" + n
form = ['pryamaya', 'uglovaya', 'p-obraznaya', 's-ostrovom', 's-barnoj-stojkoj', 'do-potolka']
style = ['klassicheskaya', 'sovremennaya', 'neoklassika', 'loft', 'provans', 'kantri', 'haj-tek', 'modern',
'minimalizm', 'skandinavskij-stil']
material = ['massiv-dereva', 'mdf', 'mdf-emal', 'shpon', 'akril', 'plastik', 'glyanecz', 'matovyj', 's-patinoj']
color = ['svetlaya', 'temnaya', 'belaya', 'golubaya', 'zelenaya', 'krasnaya', 'seraya', 'chernaya', 'cherno-belaya']
special = ['fasad-bez-ruchek', 'ramochnyj-fasad', 'fasad-s-frezerovkoj', 'radiusnyj-fasad']
for x in f(form, style, material, color, special):
print(x)
Источник: Stack Overflow на русском