2016-11-21 2 views
0

Ich habe eine Liste der Elemente wie folgt:Artikel aus der Liste entfernen gemäß einer Liste von Indizes

A = [[0 A B],[1 C D],[2 E F],[3 G H],[4 I L],[5 M N],[6 O P],[7 Q R],[8 S T],[9 U Z]] 

ich eine andere Liste definieren Sie dann etwa so:

index = [0,2,6] 

Mein Ziel ist die entfernen listet 1, 3 und 7 von A auf, so dass das Ergebnis lautet:

A = [[1 C D],[3 G H],[4 I L],[5 M N],[7 Q R],[8 S T],[9 U Z]] 

Was ist der beste Weg, um solche Artikel zu entfernen? Wenn es möglich ist, möchte ich es ohne For-Schleifen machen.

Ich habe versucht, den folgenden Code zu verwenden, aber offensichtlich funktioniert es nicht, da die Größe von A bei jeder

Iteration betroffen ist
for j in index: 
    del A[j] 

Antwort

6

der wohl funktional (und Pythonic) betroffen ist Weg, um eine neue Liste zu erstellen wäre, die Elemente an diesem Indizes in der ursprünglichen Liste Weglassen:

def remove_by_indices(iter, idxs): 
    return [e for i, e in enumerate(iter) if i not in idxs] 

Sehen Sie es in Aktion here.

+1

Der beste Weg, keine Notwendigkeit für Klammern um 'i, e' obwohl –

2

ich einfachen Trick wäre, sie zu starten von Ende zu entfernen, so dass die Position das Löschen nicht

for j in sorted(index, reverse=True): 
    del A[j] 
1

Verwenden Sie eine Liste Verständnis und enumerate eine neue Liste zu erstellen:

A = [['0 A B'],['1 C D'],['2 E F'],['3 G H'],['4 I L'],['5 M N'],['6 O P'],['7 Q R'],['8 S T'],['9 U Z']] 

print([element for index, element in enumerate(A) if index not in (0, 2, 6)]) 
>> [['1 C D'], ['3 G H'], ['4 I L'], ['5 M N'], ['7 Q R'], ['8 S T'], ['9 U Z']] 
3

Oder eine Liste Verständnis verwenden, um eine neue Liste zu machen, die die Eigenschaften, die Sie hat wollen, dann sofort ersetzen, die alte Liste.

A = [i for i in A if i[0] not in [0, 2, 6]] 
Verwandte Themen