0

私のリストが、2 番目のリストに基づいてインデックス付けされたすべての文字を削除しない理由がわかりません。以下はコードです:

L1 = ['e', 'i', 'l', 'n', 's', 't']
L2 = ['e', 'i', 'l', 'n', 's', 't']

for n_item in range(len(L1)):
    if L1[n_item] in L2:
     del L2[n_item]

以下は私が得ているエラーです:

 Traceback (most recent call last):
 File "<pyshell#241>", line 3, in <module>
 del L2[n_item]
 IndexError: list assignment index out of range

助けてくれてありがとう....

4

3 に答える 3

2

インデックスの要素を削除するたびに、リストが変更されます。

>>> items = ['a', 'b', 'c', 'd']
>>> len(items)
4
>>> items[1]
'b'
>>> del items[1]
>>> items[1]
'c'
>>> len(items)
3

エラーの原因はlen、アイテムを削除するとリストのが変更されることですが、これはループが処理されてrangeいることを更新しません。for

さらに、要素を削除してからインデックスを増やすと、すべてが 1 つのインデックスだけ左にシフトされるため、実際にはインデックスを 2 増やしているようになります。

これに対する最善の解決策は、Lattyware が提案したリスト内包表記です。forループは次のように置き換えることができます

L1 = [item for item in L1 if item not in L2]
于 2013-04-05T19:53:45.780 に答える
1

リストから特定の値を削除することだけが重要な場合 (インデックスや順序などは重要ではありません):

L1 = ['e', 'i', 'l', 'n', 's', 't']
L2 = ['e', 'i', 'l', 'n', 's', 't']

for item in L1:
    try:
        L2.remove(item)
    except ValueError:
        pass

print(L2)与えます:[]

于 2013-04-05T19:50:45.890 に答える