Python - Numeros repetidos en listas

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 7 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros repetidos en listas

Publicado por nohose (16 intervenciones) el 11/01/2015 16:07:04
Hola. Estoy intentando generar una lista de 5 elementos numericos aleatorios pero que estos no se repitan.
He realizado un algoritmo,pero creo que es por fuerza bruta.Me explico:
Voy generando listas de 5 elementos comparando cada vez si dentro de la lista generada existen elementos repetidos.
Si es asi,vuelvo a generar de nuevo una nueva lista hasta que no se repita ningún elemento.
Para pequeñas listas puede ser que sirva,pero mi pregunta es, ¿ podriamos generar elemento a elemento y comparando sucesivamente si este ha sido repetido ?
Mi codigo :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import random
lista=[]
 
 
i=0
lista2=set(lista)
for a in range(100):
	while len(lista2)<5:
		c=random.randint(1,100)
		lista.append(c)
		lista2=set(lista)
 
	print(sorted(lista2),a)
	lista=[]
	lista2=[]

En este código genero 100 listas diferentes
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jorge De Los Santos
Val: 77
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros repetidos en listas

Publicado por Jorge De Los Santos (54 intervenciones) el 11/01/2015 17:45:15
Hola Nohose.

El módulo random tiene una función llamada sample que toma k elementos de una lista. Una forma muy "compacta" de hacer lo que planteas es:

1
2
import random
lista = [random.sample(range(1,101),5) for x in range(100)]


Lo anterior genera una lista de 100 listas, donde cada lista se compone de 5 elementos no repetidos en el intervalo 1-100. Si lo anterior te parece un poco confuso, una forma equivalente es:

1
2
3
4
5
import random
intervalo=range(1,101)  # Intervalo  1 a 100
lista=[]
for x in range(100):
    lista.append(random.sample(intervalo,5))



Saludos.

Jorge De Los Santos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha disminuido su posición en 7 puestos en Python (en relación al último mes)
Gráfica de Python

Numeros repetidos en listas

Publicado por nohose (16 intervenciones) el 11/01/2015 18:17:37
Gracias jorge. Estupendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar