ビット操作を使用してパワーセットを見つけようとしています。すべてのセットを生成できますが、それらはインデックスできません。リストのリストとして保存できませんでした。私はインターネット上で解決策を見つけようとしましたが、関連情報を取得できませんでした。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]]
Iは、(i&(1 < 0)をチェックしているものを理解トラブルを抱えています。これを説明できますか? –
@TirthRami&と<<はビット演算子です。 (1 << J)は本質的に(1 *(2^j))を意味する。完全な式は、どのビットがセット(== 1)されているかをチェックすることです。この問題の詳細については、[powerSet](https://www.geeksforgeeks.org/power-set/)を参照してください。 – Khurshid