我有一个长度为N的列表,此列表的每个元素都是0或1。 我需要获得此列表的所有可能组合。这是我的代码:
def some(lst):
result = []
for element in lst:
c1 = copy.copy(element)
c2 = copy.copy(element)
c1.append(0)
c2.append(1)
result.append(c1)
result.append(c2)
return result
def generate(n):
if(n == 1):
return [[0], [1]]
else:
return some(generate(n - 1))
print generate(4)
我认为这项任务有更多的pythonic解决方案。 提前谢谢。
答案 0 :(得分:5)
它们看起来不像位模式(0000 .... 1111),即二进制位。 并且n个二进制位的所有可能组合将在0到2 ** n -1
的范围内noOfBits = 5
for n in range(2**noOfBits):
binVal = bin(n)[2:].zfill(noOfBits)
b = [ x for x in binVal]
print b
为此我们需要组合学吗?
输出:
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '1']
['0', '0', '0', '1', '0']
['0', '0', '0', '1', '1']
['0', '0', '1', '0', '0']
['0', '0', '1', '0', '1']
.......
答案 1 :(得分:3)
itertools模块具有许多组合任务的就绪生成器。为了你的任务:
list(itertools.product(*noOfBits * ((0, 1),)))