2016-08-21 14 views
0

Ich bin eine Liste gegeben, die irgendwie eine Matrix darstellt, aber es ist in der Liste Format, wieWie kann ich eine Matrix aus einer Liste erstellen?

["OOX","XOX","XOX"] 

Gibt es irgendeine Weise, die ich es in eine Matrix umwandeln kann? Ich bin durchnäsig gegangen, aber konnte nicht herausfinden!

+1

Haben Sie eine Matrix oder eine Liste von Listen wollen? –

+1

Ich würde vermuten, dass Sie das wollen: 'np.matrix ([Liste (n) für s in [" OOX "," XOX "," XOX "]])', wenn nicht, können Sie Ihre erwartete Ausgabe bereitstellen? – Akavall

+1

In welchem ​​Sinne ist das nicht schon eine Matrix? Wenn Sie es "Matrix" nennen, können Sie bereits auf seine Elemente wie "matrix [i] [j]" zugreifen. Was ist das Problem? –

Antwort

1

numpy ist zu viel dafür. Für so etwas wie Tic-Tac-Toe reicht eine Liste von Listen. Wenn die 'OOX' eine Zeichenkette ist, dann ist list('OOX') die Liste ['O','O','O'].

Sie list mit einer Liste Verständnis kombinieren:

Etwas wie:

>>> rows = ["OOX","XOX","XOX"] 
>>> board = [list(row) for row in rows] 
>>> board 
[['O', 'O', 'X'], ['X', 'O', 'X'], ['X', 'O', 'X']] 

gebraucht wie:

>>> board[0][2] 
'X' (3rd entry in first row). 

Beachten Sie, dass Listen wandelbar sind, so können die Elemente wie geändert werden gut lesen:

board[0][2] = 'O' wi Ändern Sie die 'X' in dieser Position in eine 'O'.

+3

Ihr Anwendungsbeispiel ist ziemlich sinnlos. Keine Notwendigkeit, die Umwandlung überhaupt durchzuführen, wenn Sie gerade lesen. Könnte stattdessen einfach 'rows [0] [2]' machen. Ich würde ein Beispiel hinzufügen, wo du ** einen Eintrag schreibst. –

+0

@StefanPochmann Guter Punkt. Ich habe hauptsächlich gezeigt, wie die Indexierung funktionierte, und es war offensichtlich, dass man sowohl schreiben als auch lesen kann. Trotzdem konnte es nicht schaden zu zeigen, dass die Elemente verändert werden können, also werde ich es tun. –

+0

Ja, es ist nur eine seltsame Frage. Wenn er nach Schreibfähigkeiten gefragt hätte, hätten Sie das sicher sofort gezeigt. Aber er tat es nicht, und ich bin mir nicht einmal sicher, ob er das will. Könnte eigentlich nur eine zweidimensionale ** Anzeige ** verlangen ... –

0

So einfach wie diese:

In [4]: a = ["OOX","XOX","XOX"] 

In [5]: m = np.array([*map(list, a)]) 

In [6]: m 
Out[6]: 
array([['O', 'O', 'X'], 
     ['X', 'O', 'X'], 
     ['X', 'O', 'X']], 
     dtype='<U1') 
Verwandte Themen