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']]
3 Réponses :
À 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>
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.
Utilisez le tableau numpy et remodelez-le après cela
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']]
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.
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'
C'était mon intention. Merci.
La sortie souhaitée
[['O', 'X', 'X'], ['O', 'X', 'O'], ['O', 'X', 'X']] < / code> ne semble pas correspondre à votre chaîne d'entréeXOXOXOXXOreconstituant 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.