#方針(途中まで、関係あるところのみ)
入力例1に従うと、
・C,DをCD = [list(map(int, input().split())) for _ in range(K)]として[[1, 2], [1, 3], [2, 3]]のような二重リストに格納する。
・itertools.productを用いて、CDの要素リストを、ビット全探索を用いてそのそれぞれの0番目または1番目の値で書き換えたものに更新し、printする。
・1つ出力したら書き換えられたCDを元に戻して、同様の作業を2^3回繰り返す。
#コード
ここではとりあえず、ビット全探索を用いてCDが2^3回期待通り書き換えられているかを、それぞれを全て出力することで確認することを目標とする:
Python
1from itertools import product 2 3N, M = map(int, input().split()) #4 4 4 5#[[1, 2], [1, 3], [2, 4], [3, 4]] 6AB = [list(map(int, input().split())) for _ in range(M)] 7 8K = int(input()) #3 9 10#[[1, 2], [1, 3], [2, 3]] 11CD = [list(map(int, input().split())) for _ in range(K)] 12 13_CD = CD 14 15#[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] 16for bit in list(product([0, 1], repeat = K)): 17 CD = _CD 18 for ind, to_place in enumerate(bit): 19 CD[ind] = CD[ind][to_place] 20 print(CD)
#出力エラー
Terminal
1[1, 1, 2] 2Traceback (most recent call last): 3 CD[ind] = CD[ind][to_place] 4TypeError: 'int' object is not subscriptable
#試行錯誤
出力エラーによると、(0, 0, 0)のパターン([1, 1, 2])だけうまくいっていることがわかります。しかしながら、(0, 0, 1)のパターン([1, 1, 3])以降で失敗しています。どうやら一重リストに更新されてしまったCDを元input()した二重リストにうまく戻せていないようで、_CD = CDとして保存した_CDを用いて1つ目及び2つ目のforループの中や外に色々配置してみたのですが、どうやってもnot subscriotableエラーから抜け出せません。どのような箇所を修正すればうまくいくのでしょうか。素人質問で恐縮ですが、ご教授お願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。