我的目标是想出一个长度为n的所有可能位组合的数组。例如,如果n = 3,则目标答案集应该类似于
000,
001,
010,
100,
011,
101,
110,
111
我已经找到了algorithmic solution,因为我完全没有迭代器和C ++的经验。有人可以提示如何在python中重写下一个函数吗?
答案 0 :(得分:4)
>>> import itertools
>>> result = ["".join(item) for item in itertools.product("01", repeat=3)]
>>> print result
['000', '001', '010', '011', '100', '101', '110', '111']
答案 1 :(得分:2)
没有itertools:在基数2中打印从0
到2 ** n
的数字,并用零填充它们:
for i in range(2 ** n):
print('{0:b}'.format(i).rjust(n, '0'))
请注意,这可以在任何语言中提供更简单的解决方案。您所需要的只是将基数从基数转换为基数2的函数。然后,对于从0
到2 ** n
的每个号码,您将其转换为基数2并打印或存储转化。
要将x
转换为基数2,请将其除以2
,直到达到0
并跟踪余数。剩余的列表以相反的顺序在基数2中为x
:
x = 13
13 / 2 = 6 remainder 1
6 / 2 = 3 remainder 0
3 / 2 = 1 remainder 1
1 / 2 = 0 remainder 1
=> 13 in base 2 = 1101
答案 2 :(得分:1)
import itertools
#Possible characters
n = [0, 1]
#Asking required length
l = int(input("length: "))
#Putting all possibilities in list
r = list(itertools.product(n, repeat=l))
print(r)
Python总是有一些方便的库或函数来简化复杂的事情,并且可以缩短工作时间。
在itertools.product()
中,您的第一个参数应该是您想要所有可能性的字符数组,而在repeat-keyword之后的第二个参数应该是结果的长度。