我获得了多个维度m
以及每个维度n
中的多个索引(所有维度都相同)。我想构建一个字典,其中包含维度m
的所有可能元组,索引从0
到n
作为键,[]
作为值。例如,如果m = 2
和n = 3
我会得到
{(0, 1): [], (1, 2): [], (0, 0): [],
(2, 1): [], (1, 1): [], (2, 0): [],
(2, 2): [], (1, 0): [], (0, 2): []}
我想知道如何在没有循环的情况下以简洁的方式执行此操作,并将m
作为变量。
答案 0 :(得分:3)
您可以使用itertools.product
:
>>> from itertools import product
>>> def comb(m,n):
... return {i:[] for i in product(range(n),repeat=m)}
...
>>> comb(2,3)
{(0, 1): [], (1, 2): [], (0, 0): [], (2, 1): [], (1, 1): [], (2, 0): [], (2, 2): [], (1, 0): [], (0, 2): []}
答案 1 :(得分:1)
您可以使用dict构造函数和itertools.product:
dict((x, []) for x in itertools.product(range(n), repeat=m))
结果:
In [4]: dict((x, []) for x in itertools.product(range(3), repeat=2))
Out[4]:
{(0, 0): [],
(0, 1): [],
(0, 2): [],
(1, 0): [],
(1, 1): [],
(1, 2): [],
(2, 0): [],
(2, 1): [],
(2, 2): []}
编辑:所以我注意到我已经迟到了一分钟,答案基本上等于@Kasra's,所以我会添加一些内容,以免让它完全没用:
他使用的词典理解它只支持Python 2.7+,而我使用的dict构造函数也适用于python 2.6,可能之前。另一方面,使用字典理解速度要快一些:
In [12]: %timeit dict((x, []) for x in itertools.product(range(10), repeat=5))
10 loops, best of 3: 35.7 ms per loop
In [13]: %timeit {i: [] for i in itertools.product(range(10), repeat=5)}
10 loops, best of 3: 31.8 ms per loop