質問: matrix.get(j); 7 8 if (isIncluded(left, right)) { 9 // 左辺の要素が右辺の要素が部分集合であれば 10 matrix.remove(j); 11 j--; 12 } 13 } 14 } ``` 10,11行目の「i番目の要素がj番目の部分集合である場合、j番目の要素を削除して、jをデクリメントする処理」をPythonで実装する方法がわかりません。 この処理をPythonで実現する書き方をご教示いただけないでしょうか。 初歩的な質問でお手数おかけいたしますが、どうぞよろしくおねがいします。 ※ PythonのSet{}を使う方法もあるかと思いますが、可能であれば2次元配列を使用した方法ですと幸甚です。
回答: あるリストが別のリストに対して集合として部分集合になっているかどうかは、ご指摘の通り `set` の `set.issubset()` を使うと簡単に判定できます。 これを使いたくない場合、Java の方で `isIncluded()` を実装したのと同じように Python でも実装できるはずです。たとえば、部分集合の定義通り、片方の要素が他方に全て含まれているかどうか逐一検査するというやり方です (ただし要素の重複を無視するかどうかは決める必要があります)。 リストから要素を削除する方法も Java 同様 `matrix.remove(matrix[i])` を使ったり、あるいは `del matrix[i]` を使ったりすることで実現できます。今回はインデックスで削除しているので `del matrix[i]` の方が向いていそうです。 補足:ただし私だったら、ループしながら削除するのではなく、別の新しいリストを用意して、ループしながらそれに append していく方法を選びそうです。in-place ではなくなりますが、インデックス周りのバグが起きにくそうだからです。