2016-12-29 2 views
2

In Python getrennt konvertieren, ich habe derzeit eine ein Element Liste von Elementen wie so gegeben:einen String durch Kommas zu einer Liste von Schwimmern

x= ['1.1,1.2,1.6,1.7'] 

wobei jeder des Wertes durch Komma nur getrennt ist. Das möchte ich eine Liste von Schwimmern machen, beispiels wie

x=[1.1, 1.2, 1.6, 1.7] 

Ich habe versucht x=[float(i) for i in x] und x=[float(i) for i in x.split()], aber beide Rückkehr Fehler.

+1

versuchen 'x [0] .split ('')'? – martianwars

+0

'x' ist eine Liste, Sie müssten also über' x [0] 'darauf zugreifen. Außerdem sollten Sie das Trennzeichen für den Split-Aufruf angeben, z. B .: "x [0]".split (',') ' – UnholySheep

Antwort

0

Split die Zeichenfolge durch Komma und konstruieren ein float von jedem Artikel:

[ float(item) for item in '1.1,2.3,5.1'.split(',') ] 
+0

OP hat einen anderen Eingang – martianwars

5

x ist eine Liste mit einer Zeichenfolge, so die Zeichenfolge Sie x[0] zugreifen müssen. Diese Zeichenfolge ist durch Kommas getrennt, daher müssen Sie das Trennzeichen angeben: split(','). (Andernfalls versucht split() eine Zeichenfolge auf Leerzeichen zu trennen, as described in the docs.)

So landen Sie mit:

[float(i) for i in x[0].split(',')] 
0

Stellen Sie sicher, die Sie sich bewerben Ihre split() Funktion an einer Schnur und nicht das einzelne Element-Liste. Verwenden Sie x[0] um sicherzustellen, dass. Übergeben Sie außerdem ein Trennzeichen , an die split() Funktion.

x = [float(i) for i in x[0].split(',')] 
0

x=[float(i) for i in x.split()] ist fast richtig, bis auf zwei Dinge. Zum einen geben Sie nichts an die split()-Funktion weiter, so dass es nichts in Ihrer Zeichenkette teilt (es würde sich nur auf Leerzeichen teilen, die Ihre Zeichenkette nicht hat). Sie möchten durch Kommas trennen, also müssen Sie ein Komma wie x.split(',') übergeben.

Zweitens, als x wird durch x= ['1.1,1.2,1.6,1.7'] definiert, die eine Liste mit einer einzigen Zeichenfolge ist, müssten Sie auf die Zeichenfolge im Array mit x[0] beziehen. Der endgültige Code würde wie folgt aussehen:

x = ['1.1,1.2,1.6,1.7'] 
floats = [float(i) for i in x[0].split(',')] 
print(floats) 

Dies gibt eine Liste von Schwimmern: [1.1, 1.2, 1.6, 1.7]

Wenn x waren nur eine Zeichenfolge, wie x = '1.1,1.2,1.6,1.7', dann würden Sie einfach floats = [float(i) for i in x.split(',')] verwenden.

+1

Das sind Listen, keine Arrays: https://docs.python.org/2/library/array.html – UnholySheep

+0

@UnholySheep Danke, ich habe die Terminologie korrigiert. –

+0

FYI "wird nicht auf irgendwas aufgeteilt" ist nicht korrekt, siehe [docs] (https://docs.python.org/3/library/stdtypes.html#str.split) - kein Trennzeichen bedeutet, dass es stattdessen auf Leerzeichen aufgeteilt wird . – whrrgarbl

1

können Sie map() wie folgt verwenden:

list(map(float, x[0].split(','))) 

map() nehmen eine Funktion (float in unserem Fall) und eine iterable (in unserem Fall diese Liste: x[0].split(',')). float Funktion wird für jedes Element unserer Liste genannt x[0].split(',')

Es entspricht dies list comprehension:

[float(item) for item in x[0].split(',')] 
+0

In Python3 + gibt 'map' keine Liste zurück, es gibt ein Map-Objekt zurück, das Sie in eine Liste umwandeln müssen –

+0

@IronFist Python 3 ist in dieser Frage nicht markiert! – ettanany

+0

Weder Python2, noch müssen Sie Ihre Antwort verallgemeinern, und Sie verweisen auf Python3 in Ihrer Antwort (verlinkt mit Python3-Dokumenten). –

Verwandte Themen