4

指定された形式のリストがあります:

[['John', 'Smith'], ['Linus', 'Torvalds'], ['Bart', 'Simpson']]

リスト ['Linus Torvalds', ''] にこのような要素がいくつかありますが、それらを削除したいと思います。では、なぜ次のコードはそれらを削除しないのでしょうか?

for i in people:
    if(i[0] == '' or i[1] == ''):
        print people.pop(people.index(i))
4

4 に答える 4

10

リストを反復しながらリストを変更していますが、これが問題の原因です。有効なアプローチは

people[:] = [p for p in people if p[0] != '' and p[1] != '']

このようにして、必要な要素のみを含む新しい一時リストが作成され、操作が完了すると元のリスト オブジェクトに割り当てられます。

于 2011-07-06T15:12:33.770 に答える
4

またはpeople[:] = [p for p in people if all(p)]、リストのサイズを「その場で」変更したい場合でも。

于 2011-07-06T15:17:06.743 に答える
1

リストを繰り返し処理するときに、リストから物事を削除することはお勧めできません。したがって、代わりにこれらのいずれかを試してください(また、あなたの状態はあなたが望むものではないと思います-私はそれを修正しました):

L = [['John', 'Smith'], ['Linus', 'Torvalds'], ['Bart', 'Simpson']]
delete_these = []
for index, i in enumerate(L):
    if not i[-1].strip():
        delete_these.append(i)
for i in delete_these:
    L.pop(i)
    delete_these = map(lambda x: x-1, delete_these)

また

L = [i for i in L if i[-1].strip()]

また

answer = []
for i in L:
    if i[-1].strip():
        answer.append(i)

また

i = 0
while i < len(L):
    if not L[i][-1].strip():
        L.pop(i)
    else:
        i += 1

お役に立てれば

于 2011-07-06T15:15:23.587 に答える