Seite 1 von 1

ListComprehension - Typkonvertierung

Verfasst: Freitag 1. Juli 2016, 21:36
von sfx2k
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]]

Re: ListComprehension - Typkonvertierung

Verfasst: Sonntag 3. Juli 2016, 13:41
von snafu
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]]

Re: ListComprehension - Typkonvertierung

Verfasst: Sonntag 3. Juli 2016, 15:18
von 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'

Re: ListComprehension - Typkonvertierung

Verfasst: Sonntag 3. Juli 2016, 15:44
von snafu
Stimmt natürlich. Ich hatte nicht auf dem Schirm, dass es um eine zweidimensionale Datenstruktur geht.