Je travaille actuellement sur un éditeur de carte pour un jeu en pygame, en utilisant des cartes de tuiles. Le niveau est construit à partir de blocs dans la structure suivante (bien que beaucoup plus grande):
level1 = (
(1,1,1,1,1,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,0,0,0,0,1)
(1,1,1,1,1,1))
où "1" est un bloc qui est un mur et "0" est un bloc qui est de l'air vide.
Le code suivant est essentiellement celui qui gère le changement de type de bloc:
clicked = pygame.mouse.get_pressed()
if clicked[0] == 1:
currLevel[((mousey+cameraY)/60)][((mousex+cameraX)/60)] = 1
Mais comme le niveau est stocké dans un tuple, je ne peux pas changer les valeurs des différents blocs. Comment changer facilement les différentes valeurs du niveau?
//
au lieu de simplement/
parce que dans Python 3,/
effectuera la division en virgule flottante et bousiller votre code.Réponses:
Convertir le tuple en liste:
Convertir la liste en tuple:
la source
p list(...)
place.Vous avez un tuple de tuples.
Pour convertir chaque tuple en liste:
--- OU ---
Et une fois l'édition terminée, il vous suffit de les reconvertir:
--- OU --- (Merci @jamylak)
Vous pouvez également utiliser un tableau numpy:
Pour manipuler:
la source
Vous pouvez avoir une liste de listes. Convertissez votre tuple de tuples en une liste de listes en utilisant:
ou
et modifiez-les en conséquence.
Mais un tableau numpy est plus cool.
la source
Pour convertir des tuples en liste
(Des virgules manquaient entre les tuples dans la question donnée, elle a été ajoutée pour éviter le message d'erreur)
Méthode 1:
Méthode 2:
La méthode 1 a pris --- 0,0019991397857666016 secondes ---
La méthode 2 a pris --- 0,0010001659393310547 secondes ---
la source
Pourquoi n'essayez-vous pas de convertir son type d'un tuple en une liste et vice versa.
la source
Les deux réponses sont bonnes, mais un petit conseil:
Les tuples sont immuables, ce qui implique qu'ils ne peuvent pas être modifiés. Donc, si vous avez besoin de manipuler des données, il est préférable de stocker les données dans une liste, cela réduira les frais généraux inutiles.
Dans votre cas, extrayez les données dans une liste, comme indiqué par eumiro, et après modification, créez un tuple similaire de structure similaire à la réponse donnée par Schoolboy.
Aussi, comme suggéré, l'utilisation du tableau numpy est une meilleure option
la source
numpy
fournira la solution la plus rapide pour travailler avec ce type de données.La liste des tuple et retour peut être effectuée comme ci-dessous
la source
Vous pouvez accélérer considérablement vos affaires si vous utilisez une seule liste au lieu d'une liste de listes. Ceci n'est bien sûr possible que si toutes vos listes internes sont de la même taille (ce qui est vrai dans votre exemple, donc je suppose cela).
Et vous pourriez être encore plus rapide si vous utilisiez un champ de bits au lieu d'une liste:
avec
Mais cela ne fonctionne que si vos champs contiennent juste 0 ou 1 bien sûr. Si vous avez besoin de plus de valeurs, vous devrez combiner plusieurs bits, ce qui rendrait le problème beaucoup plus compliqué.
la source