Actualmente estoy trabajando en un editor de mapas para un juego en pygame, usando mapas en mosaico. El nivel se construye a partir de bloques en la siguiente estructura (aunque mucho más 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))
donde "1" es un bloque que es una pared y "0" es un bloque que está vacío.
El siguiente código es básicamente el que maneja el cambio de tipo de bloque:
clicked = pygame.mouse.get_pressed()
if clicked[0] == 1:
currLevel[((mousey+cameraY)/60)][((mousex+cameraX)/60)] = 1
Pero como el nivel se almacena en una tupla, no puedo cambiar los valores de los diferentes bloques. ¿Cómo hago para cambiar los diferentes valores en el nivel de una manera fácil?
//
lugar de solo/
porque en Python 3,/
realizará una división de punto flotante y arruinará su código.Respuestas:
Convertir tupla a la lista:
Convertir lista a tupla:
fuente
p list(...)
lugar.Tienes una tupla de tuplas.
Para convertir cada tupla en una lista:
--- O ---
Y una vez que haya terminado de editar, simplemente conviértalos de nuevo:
--- O --- (Gracias @jamylak)
También puede usar una matriz numpy:
Para manipular:
fuente
Puedes tener una lista de listas. Convierta su tupla de tuplas en una lista de listas usando:
o
y modificarlos en consecuencia.
Pero una matriz numpy es más fresca.
fuente
Para convertir tuplas a la lista
(Faltaban comas entre las tuplas en la pregunta dada, se agregó para evitar mensajes de error)
Método 1:
Método 2:
El método 1 tomó --- 0.0019991397857666016 segundos ---
El método 2 tomó --- 0.0010001659393310547 segundos ---
fuente
¿Por qué no intentas convertir su tipo de una tupla a una lista y viceversa?
fuente
Ambas respuestas son buenas, pero un pequeño consejo:
Las tuplas son inmutables, lo que implica que no se pueden cambiar. Entonces, si necesita manipular datos, es mejor almacenarlos en una lista, ya que reducirá los gastos innecesarios.
En su caso, extraiga los datos en una lista, como lo muestra eumiro, y después de modificar, cree una tupla similar de estructura similar a la respuesta dada por Schoolboy.
También como se sugiere usar numpy array es una mejor opción
fuente
numpy
proporcionará la solución más rápida para trabajar con este tipo de datos.La lista para Tupla y viceversa se puede hacer de la siguiente manera
fuente
Podrías acelerar dramáticamente tus cosas si usaras solo una lista en lugar de una lista de listas. Por supuesto, esto es posible solo si todas sus listas internas son del mismo tamaño (lo cual es cierto en su ejemplo, por lo que asumo esto).
Y podría ser aún más rápido si usara un campo de bits en lugar de una lista:
con
Pero eso solo funciona si sus campos solo contienen 0 o 1, por supuesto. Si necesita más valores, tendría que combinar varios bits, lo que complicaría mucho más el problema.
fuente