ListComprehension - Typkonvertierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sfx2k
User
Beiträge: 54
Registriert: Dienstag 2. September 2014, 13:29

Hallo,

ich habe eine 10x10-Matrix bestehend aus Strings mit dem Wert '-1'.

Code: Alles auswählen

matrix = [['-1'] * 10 for x in range(10)]
Ich möchte nun auf eine bestimmte Range einer bestimmten 'Zeile' die Strings in Integer wandeln und das Ergebnis in einer anderen Liste speichern.
Da dachte ich, dass ich dafür eine ListComprehension benutzen kann; aber irgendwie haut das nicht so hin.

Code: Alles auswählen

ergebnisse = [int(y) for y in [x for x in matrix[2:4]]]
Hier hätte ich jetzt erwartet, dass ich mit x for x in matrix[2:4] die zwei Zeilen, also Listen aus der Matrix herausziehe, und dann mit int(y) for y jedes Element (String, dachte ich) einer jeden Zeile in einen Integer wandle.
Aber y scheint dort vom Typ List zu sein, und nicht vom Typ String.

So ganz steige ich durch LCs noch nicht durch...
Wer kann mich mal bitte aufgleisen?!

Besten Dank.


EDIT:
Ich habe die Klammern falsch gesetzt; so funktioniert es wie gewünscht:

Code: Alles auswählen

ergebnisse = [[int(y) for y in x] for x in matrix[2:4]]
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

map(int, matrix[2:4]) hätte es auch getan. Oder wenn es eine LC sein soll:

Code: Alles auswählen

[int(value) for value in matrix[2:4]]
BlackJack

@snafu: Nein, das geht nicht:

Code: Alles auswählen

In [1]: matrix = [['-1'] * 10 for x in range(10)]

In [2]: [[int(y) for y in x] for x in matrix[2:4]]
Out[2]: 
[[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
 [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]]

In [3]: [int(value) for value in matrix[2:4]]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-39c9af5fadb8> in <module>()
----> 1 [int(value) for value in matrix[2:4]]

TypeError: int() argument must be a string or a number, not 'list'
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Stimmt natürlich. Ich hatte nicht auf dem Schirm, dass es um eine zweidimensionale Datenstruktur geht.
Antworten