6

假设有n个条目,每个条目都可以取01的值。这意味着这些条目有2^n种可能的组合。条目的数量可以从16不等。

如何在不使用一千个 IF 的情况下将每个可能的组合创建为一个数字序列(即n = 2: 00, 01, 10, 11)?

4

5 回答 5

16

您可以通过0..2^n-1以二进制形式打印数字来实现这一点。

于 2009-08-22T19:14:06.373 回答
3

还不如只使用整数:

n = 5
for x in range(2**n):
  print ''.join(str((x>>i)&1) for i in xrange(n-1,-1,-1))

从此答案中提出了疯狂的十进制到二进制转换。

输出:

00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
于 2009-08-22T19:21:15.110 回答
1

生成数学组合的第 m 个字典元素。 关联

您必须通过DON KNUTH看到这一点。(生成所有可能的组合。注意:那里还提供了 C# 代码。)

于 2009-08-22T19:15:26.433 回答
0

如果每个条目的可能值只能是01,而您只需要 0 和 1 的组合,为什么不使用最多 2^(n-1) 的自然整数(二进制形式)...如建议的那样以上由尼克..如果你想要字符串,用'0'填充格式化......

于 2009-08-22T19:20:39.887 回答
0

或使用itertools

import itertools

for item in itertools.product((1, 0), repeat=4):
    print item

请注意,在这种情况下,该项目是 4 个元素的元组。

于 2016-05-02T14:06:37.350 回答