61674


python初心者です。

morphという二次元配列のリストに対して以下のように処理をしたいです。

「前後の要素を比較して、[1]番目の要素が完全に一致し、かつ[2]番目の要素が一致しなければ、比較した２つの要素をどちらも抽出してprefixというリストに入れる」  
プログラムを書いてみました。

[code]

    morph =[['akuan', 'AKUAN', '1'],
           ['aku', 'AKUAN', '0'],
           ['alangkah', 'ALANGKAH', '0'],
           ['alang', 'ALANGKAH', '0'],
           ['alang', 'ALangkah', '1'],
           ['alangkah', 'ALangkah', '0']]
    
    prefix =[]
    for k in range(len(morph)):
        if morph[k][1] ==morph[k-1][1] and morph[k][2] != morph[k-1][2]:
            prefix.append([k-1][k])
    
[/code]

期待する結果は以下の通りです。

[code]

    >>>prefix
    [['akuan', 'AKUAN', '1'],
     ['aku', 'AKUAN', '0'],
     ['alang', 'ALangkah', '1']
     ['alangkah', 'ALangkah', '0']] 
    
[/code]

しかし、上のプログラムを処理すると  
IndexError: list index out of range  
とエラーが出てしまいます。

range(len(morph))あたりに問題があるとは思うのですが改良の仕方が分かりません。  
ご教示お願い致します。


CC BY-SA 4.0
2019-12-22T08:14:13.020
61673
2019-12-22T08:44:56.357
2019-12-22T08:28:27.380
36978
question
python
for文の処理：out of rangeのエラーの対処の仕方が分からない


今回の IndexError を回避するには `k` が 1 から動くようにして、`prefix.append` の部分の添え字ミスを直せば良いです。

[code]

    for k in range(1, len(morph)):
    
[/code]

[code]

    prefix.append(morph[k])
    
[/code]

期待通りの出力を得るには、更に `morph[k-1]` も append するようにすれば良いでしょう。


CC BY-SA 4.0
2019-12-22T08:30:42.313
61674
2019-12-22T08:44:56.357
2019-12-22T08:44:56.357
19110
19110
61673
answer