2016-03-09 2 views
-1

Учитывая строку, как «А», я хотел бы создать все словари формы:Создания всех комбинаций из списка переменного размера

{"x": vx, "y": vy, "z": vz} 

где vx, vy, vz являются целыми числами от 1 до 5.

В приведенном выше примере 125 таких словарей. Но строка может иметь переменную длину.

Что такое Pythonic способ сделать это?

+1

Как может быть 'vx' целое число от 1 до 5, я не полностью понимаю ваш вопрос! – Arman

+0

Он хочет, чтобы все возможные словари были результатом выбора каждого из 'vx',' vy' и 'vz' из набора {1,2,3,4,5}. – chepner

ответ

3

Я уверен, что это дубликат, но сейчас я не могу найти хороший, так что я отвечу и сделаю его wiki сообщества. Использование itertools.product:

>>> from itertools import product 
>>> s = "xyz" 
>>> [dict(zip(s,v)) for v in product(range(1,6),repeat=len(s))] 
[{'y': 1, 'x': 1, 'z': 1}, {'y': 1, 'x': 1, 'z': 2}, {'y': 1, 'x': 1, 'z': 3}, {'y': 1, 'x': 1, 'z': 4}, {'y': 1, 'x': 1, 'z': 5}, {'y': 2, 'x': 1, 'z': 1}, {'y': 2, 'x': 1, 'z': 2}, {'y': 2, 'x': 1, 'z': 3}, {'y': 2, 'x': 1, 'z': 4}, {'y': 2, 'x': 1, 'z': 5}, {'y': 3, 'x': 1, 'z': 1}, {'y': 3, 'x': 1, 'z': 2}, {'y': 3, 'x': 1, 'z': 3}, {'y': 3, 'x': 1, 'z': 4}, {'y': 3, 'x': 1, 'z': 5}, {'y': 4, 'x': 1, 'z': 1}, {'y': 4, 'x': 1, 'z': 2}, {'y': 4, 'x': 1, 'z': 3}, {'y': 4, 'x': 1, 'z': 4}, {'y': 4, 'x': 1, 'z': 5}, {'y': 5, 'x': 1, 'z': 1}, {'y': 5, 'x': 1, 'z': 2}, {'y': 5, 'x': 1, 'z': 3}, {'y': 5, 'x': 1, 'z': 4}, {'y': 5, 'x': 1, 'z': 5}, {'y': 1, 'x': 2, 'z': 1}, {'y': 1, 'x': 2, 'z': 2}, {'y': 1, 'x': 2, 'z': 3}, {'y': 1, 'x': 2, 'z': 4}, {'y': 1, 'x': 2, 'z': 5}, {'y': 2, 'x': 2, 'z': 1}, {'y': 2, 'x': 2, 'z': 2}, {'y': 2, 'x': 2, 'z': 3}, {'y': 2, 'x': 2, 'z': 4}, {'y': 2, 'x': 2, 'z': 5}, {'y': 3, 'x': 2, 'z': 1}, {'y': 3, 'x': 2, 'z': 2}, {'y': 3, 'x': 2, 'z': 3}, {'y': 3, 'x': 2, 'z': 4}, {'y': 3, 'x': 2, 'z': 5}, {'y': 4, 'x': 2, 'z': 1}, {'y': 4, 'x': 2, 'z': 2}, {'y': 4, 'x': 2, 'z': 3}, {'y': 4, 'x': 2, 'z': 4}, {'y': 4, 'x': 2, 'z': 5}, {'y': 5, 'x': 2, 'z': 1}, {'y': 5, 'x': 2, 'z': 2}, {'y': 5, 'x': 2, 'z': 3}, {'y': 5, 'x': 2, 'z': 4}, {'y': 5, 'x': 2, 'z': 5}, {'y': 1, 'x': 3, 'z': 1}, {'y': 1, 'x': 3, 'z': 2}, {'y': 1, 'x': 3, 'z': 3}, {'y': 1, 'x': 3, 'z': 4}, {'y': 1, 'x': 3, 'z': 5}, {'y': 2, 'x': 3, 'z': 1}, {'y': 2, 'x': 3, 'z': 2}, {'y': 2, 'x': 3, 'z': 3}, {'y': 2, 'x': 3, 'z': 4}, {'y': 2, 'x': 3, 'z': 5}, {'y': 3, 'x': 3, 'z': 1}, {'y': 3, 'x': 3, 'z': 2}, {'y': 3, 'x': 3, 'z': 3}, {'y': 3, 'x': 3, 'z': 4}, {'y': 3, 'x': 3, 'z': 5}, {'y': 4, 'x': 3, 'z': 1}, {'y': 4, 'x': 3, 'z': 2}, {'y': 4, 'x': 3, 'z': 3}, {'y': 4, 'x': 3, 'z': 4}, {'y': 4, 'x': 3, 'z': 5}, {'y': 5, 'x': 3, 'z': 1}, {'y': 5, 'x': 3, 'z': 2}, {'y': 5, 'x': 3, 'z': 3}, {'y': 5, 'x': 3, 'z': 4}, {'y': 5, 'x': 3, 'z': 5}, {'y': 1, 'x': 4, 'z': 1}, {'y': 1, 'x': 4, 'z': 2}, {'y': 1, 'x': 4, 'z': 3}, {'y': 1, 'x': 4, 'z': 4}, {'y': 1, 'x': 4, 'z': 5}, {'y': 2, 'x': 4, 'z': 1}, {'y': 2, 'x': 4, 'z': 2}, {'y': 2, 'x': 4, 'z': 3}, {'y': 2, 'x': 4, 'z': 4}, {'y': 2, 'x': 4, 'z': 5}, {'y': 3, 'x': 4, 'z': 1}, {'y': 3, 'x': 4, 'z': 2}, {'y': 3, 'x': 4, 'z': 3}, {'y': 3, 'x': 4, 'z': 4}, {'y': 3, 'x': 4, 'z': 5}, {'y': 4, 'x': 4, 'z': 1}, {'y': 4, 'x': 4, 'z': 2}, {'y': 4, 'x': 4, 'z': 3}, {'y': 4, 'x': 4, 'z': 4}, {'y': 4, 'x': 4, 'z': 5}, {'y': 5, 'x': 4, 'z': 1}, {'y': 5, 'x': 4, 'z': 2}, {'y': 5, 'x': 4, 'z': 3}, {'y': 5, 'x': 4, 'z': 4}, {'y': 5, 'x': 4, 'z': 5}, {'y': 1, 'x': 5, 'z': 1}, {'y': 1, 'x': 5, 'z': 2}, {'y': 1, 'x': 5, 'z': 3}, {'y': 1, 'x': 5, 'z': 4}, {'y': 1, 'x': 5, 'z': 5}, {'y': 2, 'x': 5, 'z': 1}, {'y': 2, 'x': 5, 'z': 2}, {'y': 2, 'x': 5, 'z': 3}, {'y': 2, 'x': 5, 'z': 4}, {'y': 2, 'x': 5, 'z': 5}, {'y': 3, 'x': 5, 'z': 1}, {'y': 3, 'x': 5, 'z': 2}, {'y': 3, 'x': 5, 'z': 3}, {'y': 3, 'x': 5, 'z': 4}, {'y': 3, 'x': 5, 'z': 5}, {'y': 4, 'x': 5, 'z': 1}, {'y': 4, 'x': 5, 'z': 2}, {'y': 4, 'x': 5, 'z': 3}, {'y': 4, 'x': 5, 'z': 4}, {'y': 4, 'x': 5, 'z': 5}, {'y': 5, 'x': 5, 'z': 1}, {'y': 5, 'x': 5, 'z': 2}, {'y': 5, 'x': 5, 'z': 3}, {'y': 5, 'x': 5, 'z': 4}, {'y': 5, 'x': 5, 'z': 5}] 
>>> len(_) 
125 

Обратите внимание, что мы не жёстко длину строки.

+0

Удалил мой (близкий) дублированный ответ; Я забыл о аргументе 'repeat' для' product'. – chepner

+0

Спасибо! Я должен изучить эту библиотеку itertools более подробно. –