2017-07-01 50 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

林間空地知道。快樂的編碼 –

相關問題