En lugar de un completo shuffle
, estoy buscando un parcialshuffle
función en python.¿Cómo hacer una mezcla aleatoria pero parcial en Python?
Ejemplo: "cadena" debe dar lugar a "stnrig", pero no "nrsgit"
Sería mejor si puedo definir un "porcentaje" específico de caracteres que tienen que ser reorganizado.
propósito es probar algoritmos de comparación de cadenas. Quiero determinar el "porcentaje de mezcla" más allá del cual un (mi) algoritmo marcará dos cadenas (barajadas) como completamente diferentes.
Actualización:
Aquí está mi código. ¡Las mejoras son bienvenidas!
import random
percent_to_shuffle = int(raw_input("Give the percent value to shuffle : "))
to_shuffle = list(raw_input("Give the string to be shuffled : "))
num_of_chars_to_shuffle = int((len(to_shuffle)*percent_to_shuffle)/100)
for i in range(0,num_of_chars_to_shuffle):
x=random.randint(0,(len(to_shuffle)-1))
y=random.randint(0,(len(to_shuffle)-1))
z=to_shuffle[x]
to_shuffle[x]=to_shuffle[y]
to_shuffle[y]=z
print ''.join(to_shuffle)
el problema con su código de barajar es que podría terminar con menos caracteres mezclados de los deseados si hay una secuencia de swaps que hace un ciclo ... – fortran
sí, es bastante posible para cadenas pequeñas. Creo que mi código está sesgado hacia la velocidad en lugar de la precisión. – 384X21
algunos otros consejos: ¿por qué estás incrementando 'i' al final del ciclo? no debería tener ningún efecto (creo que es un remanente de una versión 'while'); el intercambio es más idiomático en Python con la deconstrucción de la tupla en lugar de usar variables intermedias. – fortran