2017-01-11 3 views
0
[['user_1', 
    'user_2', 
    'user_8', 
    None, 
    None], 
['ben', 
    'karl', 
    None, 
    None]] 

fehlt Ich versuche, die fehlenden WerteEntfernen aus der Liste der Werte Keine

for element in df: 
    element=[x for x in element if x is not None] 

dieser Code lassen Sie alles zu entfernen, wie es

+0

Sie könnten [** 'filter' **] (https://docs.python.org/2/library/functions.html#filter) verwenden, obwohl das auch leere Strings, Nullen usw. entfernen würde. –

+1

Sie kann diesen Artikel hilfreich finden: [Fakten und Mythen über Python-Namen und Werte] (http://nedbatchelder.com/text/names.html), die von SO-Veteran Ned Batchelder geschrieben wurde. Und hier ist eine verkürzte Version des gleichen info, mit niedlichen Diagrammen: [Andere Sprachen haben "Variablen", Python hat "Namen"] (http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have- Variablen) –

+0

FWIW, keine der Antworten in diesem Duplizierungsziel zeigt, wie die vorhandene Liste (oder ihre Unterlisten) mutiert wird, anstatt sie zu ersetzen. –

Antwort

1

Das Problem mit Ihrem Code ist, dass die Leitung

element=[x for x in element if x is not None] 

erstellt die neue gefilterte Liste und bindet sie an den Namen element, der das alte Listenobjekt ersetzt, an das der Name element gebunden war. Aber wir können slice Zuordnung verwenden, um es diese Liste zu machen mutieren statt:

df = [ 
    [ 
     'user_1', 
     'user_2', 
     'user_8', 
     None, 
     None, 
    ], 
    [ 
     'ben', 
     'karl', 
     None, 
     None, 
    ] 
] 

# Remove the `None` values 
for element in df: 
    element[:] = [x for x in element if x is not None] 

for row in df: 
    print(row) 

Ausgang

['user_1', 'user_2', 'user_8'] 
['ben', 'karl'] 
0

Neuzuweisung element war nicht die Liste ändern, weil element ist eine separate Variable.

df = [[x for x in element if x is not None] for element in df] 
1
my_list= [['user_1', 
    'user_2', 
    'user_8', 
    None, 
    None], 
['ben', 
    'karl', 
    None, 
    None]] 

print [ [ elt for elt in a_list if elt is not None ] for a_list in my_list ] 

[[ 'user_1', 'user_2', 'user_8':

Mit einer kleinen Änderung, können Sie eine neue äußeree Liste mit einem verschachtelten Verständnis, so etwas wie dies erzeugen ], [ 'ben', 'karl']]

+2

Dies würde auch Listenelemente mit "0" in ihnen entfernen ... –

+0

@ l'L'l rechts, behoben. – YOBA

+0

Das ist in Ordnung, wenn 'len (meine_liste)' klein ist, aber wenn es riesig ist, ist es wahrscheinlich wünschenswert, RAM zu speichern, indem man die vorhandene Liste mutiert, anstatt sie zu ersetzen. OTOH, ersetzt 'my_list' _ist_ etwas schneller als mutieren. –

1
for element in df: 
    element[:]=[x for x in element if x is not None] 

aus:

[['user_1', 'user_2', 'user_8'], ['ben', 'karl']] 

Document: enter image description here

Verwandte Themen