2017-07-01 16 views
0

我试图找到使用位操作设置的权力。我可以生成所有设置,但它们不可索引。我无法将它保存为列表清单。我试图通过互联网找到解决方案,但无法获得相关信息。Python:找到功率设置,而不使用像itertools等任何内置函数

这是我使用的代码。

n = int(input()) # Size of the array 
noteValue = [] # Array whose power set is to be found 
for i in range(n): 
    noteValue.append(int(input())) 


powerSet = [] 
for i in range(1<<n): 
    for j in range(n): 
     if (i & (1<<j) > 0): 
      powerSet.append(noteValue[j]) 

print(powerSet) 

输出:

[1, 2, 1, 2, 3, 1, 3, 2, 3, 1, 2, 3] 

所需的输出:

[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] 
+0

我无法理解什么是(I&(1 < 0)检查。你能解释一下吗? –

+0

@TirthRami @和<<是按位运算符。 (1 << J)实质上是指(1 *(2^j))。完整的表达式是检查哪个位被设置(== 1)。有关此问题的完整参考,请访问[powerSet](https://www.geeksforgeeks.org/power-set/) – Khurshid

回答

0

其实你可以使用一个临时列表sub这样的例子:

powerSet = [] 
for i in range(1<<n): 
    # Add sub list 
    sub = [] 
    for j in range(n): 
     if (i & (1<<j) > 0): 
      # Append to sub list 
      sub.append(noteValue[j]) 
    # Then append sub to pwerset after finishing the inner loop 
    powerSet.append(sub) 

print(powerSet) 

所以,这个INP UT:

2 
2 
3 

这将输出:

[[], [2], [3], [2, 3]] 
+1

非常感谢您,添加子列表完成了这项工作。获得了所需的输出。 – Khurshid

+0

林间空地知道。快乐的编码 –

相关问题