0
votes

créer une matrice ou une liste de listes avec python

Je travaille sur un tutoriel travaillant sur des listes et utilisant tic-tac-toe.

On me donne une chaîne comme: XOXOXOXXO

Et j'aimerais convertir cela en une matrice ou un liste de liste, par exemple:

tic_tac_toe = [['X', 'O', 'X'], ['O', 'X', 'O'], ['O', 'X', 'X']]

Je peux obtenir ceci sous forme de 'liste', mais je ne peux pas obtenir cela sous forme de liste de listes. p>

J'ai recherché divers articles, et l'un des défis est que j'en vois beaucoup qui ont 5 ou 7 ans, et je me demande à quel point certaines des réponses sont toujours pertinentes, et je n'ai pas été en mesure pour faire fonctionner ces recommandations précédentes.

player_actions = 'XO_OOX_X_'

cells = list()

print('Before loop:', player_actions)

for char in player_actions:
    cells.insert(0, ''.join(char.split()))

# Output
print('After loop:', cells)

Output example:
Before loop: XOXOXOXXO
After loop: ['O', 'X', 'X', 'O', 'X', 'O', 'O', 'X', 'X']

Goal: [['O', 'X', 'X'],['O', 'X', 'O'],['O', 'X', 'X']]


2 commentaires

La sortie souhaitée [['O', 'X', 'X'], ['O', 'X', 'O'], ['O', 'X', 'X']] < / code> ne semble pas correspondre à votre chaîne d'entrée XOXOXOXXO


reconstituant ce qui précède à partir de plusieurs essais, et j'ai attrapé les mauvaises pièces pour l'illustration. Je m'excuse pour la confusion.


3 Réponses :


1
votes

À l'aide de slicing , créez un lot d'éléments également répartis:

print([[i] for i in [s[x:x+3] for x in range(0,len(s),3)]]) # [['XOX'], ['OXO'], ['XXO']] 
print([[i for i in s[x:x+3]] for x in range(0,len(s),3)])   # [['X', 'O', 'X'], ['O', 'X', 'O'], ['X', 'X', 'O']]

one-liner:

s = 'XOXOXOXXO'
splitted = [s[x:x+3] for x in range(0,len(s),3)]
print([[i] for i in splitted])

p>


1 commentaires

J'ai continué à essayer cela avec des boucles standard pour mais je me heurterais à des erreurs d'index hors de portée. Merci de partager la version de compréhension de la liste.



1
votes

Utilisez le tableau numpy et remodelez-le après cela

code

import numpy as np

arr = ['O','X','O','X','X','O','X','X','O'] #let's take this list as an example

arr = np.array(arr).reshape(3,3) #this creates a 3x3 matrix of the given list

arr = arr.tolist() #if you want to convert numpy array back to list

print(arr)

#output
# [['O', 'X', 'O'], ['X', 'X', 'O'], ['X', 'X', 'O']]


2 commentaires

J'ai vu les modules numpy mentionnés avec matrix. J'essayais de le faire sans importer de module, mais cela fonctionne plutôt bien. Merci de l'avoir partagé.


@Wolftales Heureux d'aider, juste mes deux cents, je pense qu'il est préférable d'utiliser numpy quand il s'agit de tableaux multidimensionnels.



1
votes

En supposant que la sortie souhaitée pour

cells = [[c for c in player_actions[i:i+3]] for i in range(0, len(player_actions), 3)]

est

[['X', 'O', 'X'], ['O', 'X', 'O'], ['X', 'X', 'O']]

, vous pouvez générer cela en utilisant une compréhension de liste imbriquée:

player_actions = 'XOXOXOXXO'


1 commentaires

C'était mon intention. Merci.