2016-04-21 17 views
1

Ich muss ein Element in einer Liste von Zeilen nach Index von welchem ​​Element lines[0] nicht in den Headern entfernen.Python: Pop-Element in der Liste der Listen nach Index

Der Eingang ist wie folgt:

headers = ['internal_id', 'default_code', 'ean13', 'supplier_id', 'product_qty'] 
lines = [['default_code', 'fld_code', 'test'],[1212, 4545, 'test1'],[45, 787, 'test2']] 

Die erwartete Ausgabe ist wie folgt:

lines = [['default_code'],[1212],[45]] 

Was habe ich versucht, so weit zu tun, ist hier:

for x in lines[0]: 
    if x not in headers: 
     for line in lines[0]: 
      line.pop(line.index(x)) 
print lines 

Diese hat die erforderliche Ausgabe nicht erzeugt. Bitte helfen Sie mit.

+0

Da Sie die Sprache Kevin Cruijssen korrigiert haben, verstehe ich nicht ... Für mich "Die erwartete Ausgabe" ist nicht kompatibel mit der Erklärung "Ich muss ein Element in einer Liste von Zeilen nach Index welche Zeile entfernen [0] nicht in den Headern " – Vince

Antwort

1

Meine Korrektur basierend Ihres Codes:

for i, x in reversed(list(enumerate(lines[0]))): 
    if x not in headers: 
     for line in lines: 
      line.pop(i) 
print lines 

Ausgang:

[['default_code'], [1212], [45]] 
+0

Jo, ich habe meine Antwort bearbeitet. Es wird die Zeilen [0] umgekehrt durchlaufen und mit mehr als 2 Elementen arbeiten. Wenn die Frage jedoch als beantwortet markiert ist, sollten Sie sie nicht bearbeiten. – qvpham

+0

Danke, dass es funktioniert hat ....! – Jothimani

0

Verwenden Sie Listenverständnis (Sie könnten auch filter verwenden).

lines = [line for line in lines if line[0] in headers] 

Ausgang:

[['default_code', 'fld_code']] 

Wenn das, was Sie wollen eine "manuelle" Loop-Einsatz ist list.remove:

for x in lines: 
    if x[0] not in headers: 
     lines.remove(x) 
+0

@ Ich brauche den verpassten Artikel in Zeilen [0] vergleichsweise mit Kopfzeilen, sowie alle Listen in Zeilen nach gleichem Index des verpassten Artikelindexes der Zeilen [0] zu entfernen. – Jothimani

0

, wenn Sie Pop verwenden möchten, müssen Sie Indizes verwenden und dann Es ist besser, von Anfang an zu beginnen, um kein Indizproblem zu haben.

Ich weiß nicht, was ist Ihr Projekt, aber Sie sollten die Verwendung eines Wörterbuches in Betracht ziehen.

0

Dies ist der Code, den Sie :)

for x in lines[0]: 
    if x not in headers: 
     n = lines[0].index(x) 
     for line in lines: 
      line.remove(line[n]) 
print lines 

Sie waren irgendwie nah schreiben wollte. Sie möchten Pop nicht verwenden, wenn Sie ein Element an einer bestimmten Position "entfernen" möchten. Es gibt elegantere und kürzere Lösungen, aber diese passt zu Ihrem Programmierstil. Schau dir das Listenverständnis in Python an, es ist ziemlich mächtig.

0
for line in lines[0]: 
     line.pop(line.index(x)) 

Ich hoffe, dass für die Schleife Zeile Wert von String-Typ hält. Wir können Pop nicht mit String verwenden. korrigiere mich, wenn ich falsch liege.

Verwandte Themen