2017-07-01 10 views
0

ビット操作を使用してパワーセットを見つけようとしています。すべてのセットを生成できますが、それらはインデックスできません。リストのリストとして保存できませんでした。私はインターネット上で解決策を見つけようとしましたが、関連情報を取得できませんでした。Python:itertoolsなどのinbuilt関数を使用せずにパワーセットを見つける

ここに私が使用したコードがあります。

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] 

所望の出力:このINPと、

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) 

ので:

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

Iは、(i&(1 < 0)をチェックしているものを理解トラブルを抱えています。これを説明できますか? –

+0

@TirthRami&と<<はビット演算子です。 (1 << J)は本質的に(1 *(2^j))を意味する。完全な式は、どのビットがセット(== 1)されているかをチェックすることです。この問題の詳細については、[powerSet](https://www.geeksforgeeks.org/power-set/)を参照してください。 – Khurshid

答えて

0

が実際にあなたがこの例のように一時リストsubを使用することができますUT:

2 
2 
3 

は、それが出力されます:

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

ありがとうございます。サブリストを追加しました。希望の出力を得ました。 – Khurshid

+0

Glade for know。ハッピーコーディング –

関連する問題