とりあえず、質問の
'[\'と余計なものが入っていて
の部分から。
これは、今回のコードにおいて、ans[0]
には ['c']
とリストの中に文字列型の'c'
が格納されているのですが、eqe_ans = str(ans[j])
としていきなり全体を文字列に変えていることに起因しております。
本来ここで必用なことは、ans[0]の内部にある文字列を取り出してstartswith()
の引数に渡す
Python
1 eqe_ans = ans[j][0]
2 if lines[j][0].startswith(eqe_ans) == True:
または、リストをタプル型に変更してstartswith()
に渡す
Python
1 eqe_ans = tuple(ans[j])
2 if lines[j][0].startswith(eqe_ans) == True:
なのではないでしょうか。
次に、for文
での index
絡みの問題点が何箇所かあります。
Python
1for i in range(4):
2 line_alpha =[]
3 for j in range(5): #ans の範囲は(0~1)なのでは?
4 eqe_ans = str(ans[j])
5 #↓ linesのインデックスは jではなくてiなのでは?
6 if lines[j][0].startswith(eqe_ans) == True:
7 #↓ linesのインデックスは jではなくてiなのでは?
8 line_alpha.append(lines[j][1])
基本的にfor
文は(index
を使う必要性が無い場合)リストの要素でループを回すようにしてください。
このようすることで、 index
の取り違いや範囲の間違いは少なくなります。
Python
1for word, symbol in lines:
2 for prefix in ans:
3 …
で、更に
- 内側のループと外側のループを入れ替える
- 全体の結果を格納するためのリスト(
res
)と各ワード毎の結果を格納するためのリスト(line_alpha
)を分け、ループ毎に line_alpha
をres
にappend()
するようにする
の部分で大きく構成を変えて・・
たぶんやりたい事はこんな感じになるのではないでしょうか。
Python
1lines = [['cat', 'A'], ['dog', 'B'], ['rabbit', 'C'], ['daisy', 'D']]
2ans = [['c'], ['d']]
3
4res = []
5for prefix, in ans:
6 line_alpha =[]
7 for word,symbol in lines:
8 if word.startswith(prefix):
9 line_alpha.append(symbol)
10 res.append(line_alpha)
11print(res)
12# => [['A'],['B','D]]
更に内側のループを内包表記にするとこんな感じです。
Python
1lines = [['cat', 'A'], ['dog', 'B'], ['rabbit', 'C'], ['daisy', 'D']]
2ans = [['c'], ['d']]
3
4res = []
5for prefix, in ans:
6 line_alpha =[symbol for word,symbol in lines if word.startswith(prefix)]
7 res.append(line_alpha)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。