[pyar] randomizar parte de una lista
Gustavo Campanelli
gedece en gmail.com
Mie Ene 5 23:07:14 ART 2011
Saludos, esta vez quise randomizar la lista de precios de venda de
productos. O sea, no es que quería poner precios random, sino que
quería desordenar la lista de precios que uso para comerciar en un
juego.
En particular, la lista tiene una primera linea con el nombre del
negocio, y un espacio que no hay que tocar, luego los precios y luego
varios comentarios comenzados con # que no hay que tocar.
Entonces hice un pequeño programa en python utilizando una función que
encontré en la explicación del algoritmo Fisher-Yates en wikipedia,
algoritmo que se usa para mezclar listas que no sean exageradamente
largas. http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
#!/usr/bin/python
import random
def shuffle(x):
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = random.randrange(i+1)
x[i], x[j] = x[j], x[i]
entrada = open('negocio.txt','r')
lineas = entrada.readlines()
entrada.close()
ordena = []
resto = []
for linea in lineas [1:]:
if len(linea) > 1:
if linea[0] <> '#':
ordena.append(linea)
else:
resto.append(linea)
shuffle(ordena)
salida = open('negocio.txt','w')
salida.write(lineas[0])
salida.write(lineas[1])
for linea in ordena:
salida.write(linea)
salida.write(lineas[1])
for linea in resto:
salida.write(linea)
salida.close()
Y listo, problema solucionado. Me llevó más o menos 10 minutos, desde
prototipo, pruebas, ajustes y a producción.
Gedece
More information about the pyar
mailing list