二次元配列でその要素があればすでにある配列に数字を格納したいです。
X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2]]
という配列Xがあります。この配列を別の配列Yに入れ替えたいです。入れ替える条件指定として、
二次元配列で既出の数字が入っている配列があれば、その配列に数字を格納したいです。つまり、0番目の要素が0のもの([0, 3, 7], [0, 9, 8],[0, 5, 9],[0, 8, 3])を別の配列Yにいれたいということです。また、0番目の要素が1のものの時はそれぞれhelloと出力させたいです。
X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2]] for i in range(8): if X[i][0] == 0: temp = [ set( X[0][1:3] ) ] print(temp) for x in X[i][1:3]: xSet = X[i][1:3] for y in temp: if not y.isdisjoint(xSet): y |= xSet break else: temp.append( xSet ) else: print("hello") Y = [ list(x) for x in temp ] print(Y)
とコードを書きましたが、
y |= xSet TypeError: unsupported operand type(s) for |=: 'set' and 'list'
とエラーが出ました。理想のアウトプットは、print(Y)で
[[3,7,9,8,5]]
と出力されることです。
どのように直せば目的のアウトプットになりますか?
ちなみに、もし配列Xが
X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2],[0, 2, 4]]
なら理想のアウトプットは
[[3,7,9,8,5],[2,4]]
です。
「理想のアウトプット」はそれで合っていますか?
すみません、間違っていました。この場合、[[3,7,9,8,5]]です。
そうはならないような……? 0番目の要素が[3,7]で1番目の要素が[9,8]だと思いますが、一緒の配列にまとめる方法でいいんでしょうか。
0番目の要素の意味は、[0, 3, 7]の0、[0, 9, 8]の0、[1, 1, 6]の1、[1, 8, 3]の1、[0, 5, 9]の0・・・を指しています。この0番目の要素が0なら一緒の配列にまとめたいという意味です。
とすると、ふたつめのアウトプットがよく分からないんですが…… [0, 2, 4]も0番目の要素が0では?
2つの要素([3, 7]、[9, 8]、[5, 9]など)のどちらかがもうすでに配列に入っていればすでにある配列に数字を格納したいからです。
[2, 4]のどちらも[[3,7,9,8,5]]には存在していないから、[2, 4]は別の配列に存在することになります。
ですよね。そうすると[3, 7]と[9, 8]は別れると思うんですが。
[0, 8, 3]があるから、[3, 7]と[9, 8]は一緒になります。途中まではYは別々の配列だったのが、[0, 8, 3]が出てきたときに[3, 7]と[9, 8]は一緒の配列に入ります。
それは質問文に明記しておいた方がいいのでは……
回答1件
あなたの回答
tips
プレビュー