2017-11-23 28 views
0

この機能をテストするとインデックスが範囲外であると言うエラーが表示される理由はわかりません。誰でもこの問題を解決するのを助けてくれますか?リストからオブジェクトを削除する

def intersect_lists(L1, L2): 
'''(list, list) -> list 
Return L1 with items not in L2 removed. 
>>> intersect_lists([1, 2, 3, 4, 5, 6], [4, 2, 6]) 
[2,4,6] 
''' 
new_list = [] 

for item in range(len(L1)): 
    if L1[item] == L2[item]: 
     new_list.append(L1[item]) 
return new_list 
+1

は、完全なエラーメッセージを表示します。 –

+1

範囲パラメータとして "len(L1)"を使用します。それから1を引く必要があります。配列はインデックス0から始まるので、[1,2]はインデックス0と1を持ちますが、長さは2になります – Markus

答えて

3

使用リスト内包表記:

最終的には長さためのインデックスエラーにつながるしかし、あなたの特定のエラーは、あなたがL1の長さを反復していることに起因している
def intersect_lists(L1, L2): 
    return [i for i in L1 if i in L2] 

、 L1の値はL2より大きい。リスト内包なし

def intersect_lists(L1, L2): 
    final_list = [] 
    for i in L1: 
     if i in L2: 
     final_list.append(i) 

    return final_list 
+0

リストの理解なしでそれを行うにはどうしたらいいですか? – bigd

+0

@bigd最近の私の編集をご覧ください。 – Ajax1234

1

またはブールそして:

list(set(L1) & set(L2)) 
関連する問題