2017-01-24 5 views
0

Ich habe Probleme, String und Int/Float von einem einzigen Array zu trennen. Bisher konnte ich nur Methoden finden entfernen/Auszug aus der Liste mit bestimmten Zeichenfolge oder Zahl, aber nicht Datentypen :(Wie trennt man Datentypen von der Liste?

Eingang:

a = [1,2,3,'a',4,11,212,'a','b','c',3,32,4,'d','e'] 

gewünschte Ausgabe:

['a','a','b','c','d','e'] 
+0

Mögliche Duplikat [Python: Saubere und effiziente Art und Weise Elemente zu entfernen, die nicht von der Liste int sind konvertierbar ] (http://stackoverflow.com/questions/29913324/python-clean-and-efficient-way-to-remove-items-that-are-not-convertable-to-int) –

Antwort

3

Python hat die isinstance() Funktion zu überprüfen, ob Objekte von bestimmtem Typ sind.
BTW Ihre angegebene Liste ist nicht korrekt!

>>> l = [1, 2, 3, 'a', 4, 11, 212, 'a', 'b', 'c', 3, 32, 4, 'd', 'e'] 
>>> [item for item in l if isinstance(item, str)] 
['a', 'a', 'b', 'c', 'd', 'e'] 
+0

Ich habe den Beitrag bearbeitet. Danke für die Hilfe! noch neu bei Python. Haha – adam

+0

Eine zusätzliche Frage, wenn es Ihnen nichts ausmacht. Wenn l als np.array() deklariert ist, funktioniert der Code nicht, da alle Elemente im Array vom Typ string sind. Gibt es einen Weg um dies? – adam

1

Sie können die Verwendung type() Funktion, um zwischen den verschiedenen Datentypen zu unterscheiden

+1

https: //docs.python .org/3/library/functions.html # type – Craicerjack

+0

@Craicerjack Danke, hinzugefügt –

1

Sie können verwenden:

a = [1,2,3,'a',4,11,212,'a','b','c',3,32,4,'d','e'] 
[x for x in a if type(x)==str] 

Ausgang ist:

['a', 'a', 'b', 'c', 'd', 'e'] 
0

Es gibt viele Möglichkeiten, um dieses Szenario zu erreichen, können Sie auch idiomatische Weise verwenden,

a = [1,2,3,'a',4,11,212,'a','b','c',3,32,4,'d','e'] 

print [item for item in a if type(item) is str] 

Output list: ['a', 'a', 'b', 'c', 'd', 'e'] 
Verwandte Themen