2017-11-04 1 views
0

Ich habe eine Python-Liste, die wie alist = ['4', '1.6', 'na', '2e-6', '42'] aussieht. Wenn ich die Zitate aus dieser entfernen möchten, und machen es aussehen wie [4, 1.6, na, 2e-6, 42], normalerweise verwende ich den folgenden Code:Entfernen von Anführungszeichen aus Elementen in Python-Liste

alist = [float(x) if type(x) is str else None for x in alist] 

Aber dieses Mal, als ich die Zeichenfolge 'na' als eines der Elemente in der Liste haben, diese Codezeile wird nicht funktionieren. Gibt es eine elegante Möglichkeit, dies in Python zu tun?

+0

Sie meinen 'nan' statt' na'? – nbro

+0

aus irgendeinem Grund habe ich viele große Listen, und wenn es keinen Wert gibt, sagt es na oder nein, anstelle von Nan. Ich möchte wissen, ob es möglich ist, für jeden Buchstaben zu tun! – Pia

+0

Was erwarten Sie von einem Algorithmus, wenn die Liste "na" enthält? – nbro

Antwort

1

Angenommen, Sie sind glücklich, den Wert 'na' mit None oder allgemeiner zu ersetzen, jede nicht-Schwimmertext mit None sucht, dann könnte man so etwas wie:

def converter(x): 
    try: 
     return float(x) 
    except ValueError: 
     return None 

alist = [converter(x) for x in alist] 

Dies wird alles umwandeln zu schweben, dass es kann. So, wie es aussieht, wird dies auch bestehende Nummern umwandeln zu schweben:

>>> [converter(x) for x in ('1.1', 2, 'na')] 
[1.1, 2.0, None] 
+0

Vielen Dank, das funktioniert perfekt :) – Pia

0

Wenn Python Listen, Mengen, dicts usw. werden ausgedruckt, werden sie im gleichen Format gedruckt, dass Python verwendet die „raw zu kompilieren Code." Python kompiliert Listen in Anführungszeichen. Sie müssen also nur über die Liste iterieren.

einfach einen Generator Ausdruck verwenden, um dies zu beheben (obwohl es doens't wirklich viel Wirkung haben, wenn Sie auf einem tkinter Widget oder etwas angezeigt wird):

>>> alist = ['4', '1.6', 'na', '2e-6', '42']  

>>> for a in alist: 
... print(a) 

>>> 4 
>>> 1.6 
>>> na 
>>> 2e-6 
>>> 42 

Ich bin nicht sicher, wo die „na "," Nan "Verwirrung kommt von. Unabhängig davon, wenn Sie die Anführungszeichen verlieren möchten, führen Sie Ihren Code durch einen Generatorausdruck und er befindet sich nicht mehr unter der "Listenklasse" - daher erscheinen die Anführungszeichen nicht mehr.

Die Listenelemente sind alle immer noch die gleiche Art,

edit: Klarheit, Grammatik

+0

Danke für die klare Erklärung :) – Pia

Verwandte Themen