这就是我想要它做的事情:
import itertools
list(itertools.product(*[[0,1]]*4))
输出:
[(0, 0, 0, 0),
(0, 0, 0, 1),
(0, 0, 1, 0),
(0, 0, 1, 1),
(0, 1, 0, 0),
(0, 1, 0, 1),
(0, 1, 1, 0),
(0, 1, 1, 1),
(1, 0, 0, 0),
(1, 0, 0, 1),
(1, 0, 1, 0),
(1, 0, 1, 1),
(1, 1, 0, 0),
(1, 1, 0, 1),
(1, 1, 1, 0),
(1, 1, 1, 1)]
但它对我有点混淆。有更多的pythonic方法吗?
答案 0 :(得分:6)
z-index: -5
采用itertools.product
参数,这简化了一点,因为它避免了参数解包并因此避免了列表乘法:
repeat
这甚至在official documentation 1 中被调用(尽管该示例使用itertools.product(range(2), repeat=4)
)。
1 注意,我使用的是repeat=3
而不是range(2)
或(0, 1)
,因为这就是它在文档中的编写方式。无论哪种方式都可行:)(显然)
答案 1 :(得分:3)
嗯,就是这样:
[0, 1]
输出:
import itertools
list(itertools.product((0, 1), repeat=4))
不能比那简单得多:)。
答案 2 :(得分:1)
如果它清晰你之后:
file_ID_doublearr = flipud(file_ID_doublearr);
如果你不喜欢嵌套但是喜欢列表理解:
for a in range(2):
for b in range(2):
for c in range(2):
for d in range(2):
tup = (a,b,c,d)
print(tup)
如果你想强调二进制
[ (d,c,b,a) for d in range(2) for c in range(2) for b in range(2) for a in range(2) ]
答案 3 :(得分:0)
另一种方式:
>>> [tuple(format(x,'04b')) for x in range(16)]
[('0', '0', '0', '0'), ('0', '0', '0', '1'), ('0', '0', '1', '0'), ('0', '0', '1', '1'), ('0', '1', '0', '0'), ('0', '1', '0', '1'), ('0', '1', '1', '0'), ('0', '1', '1', '1'), ('1', '0', '0', '0'), ('1', '0', '0', '1'), ('1', '0', '1', '0'), ('1', '0', '1', '1'), ('1', '1', '0', '0'), ('1', '1', '0', '1'), ('1', '1', '1', '0'), ('1', '1', '1', '1')]
如果你不介意字符串......
或者只是转换,如果你想要整理:
>>> map(tuple, (map(int, format(x,'04b')) for x in range(16)))
[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]