Pregunta Convertir un resultado random.random () en una lista - Python


Estoy tratando de crear una lista que extraiga diez números reales aleatorios entre 30 y 35 y los imprima en una lista. Cuando ejecuto el siguiente código, aparece el siguiente error:

TypeError: el objeto 'float' no es iterable.

Aquí está el código:

lis = list(range(10))
random.seed(70)
for i in range(0, len(lis)):
    randreal = (random.random()*5 + 30)
    lis = list(randreal)
    print(lis)

Siento que me falta algo obvio. Cuando ejecuto el código sin

lis=list(randreal)
print(lis)

Obtengo los resultados que quiero, pero no en una lista. También estoy tratando de hacer esto sin random.uniform


5
2017-08-26 22:13


origen


Respuestas:


Primero creaste la lista lst [0,1,2,3,4,5,6,7,8,9]. Esto es innecesario. Entonces estás intentando sobrescribir esta lista lst con nueva lista list(randreal) que arroja error, porque su constructor de lista no es válido

Puede comenzar con la lista vacía y agregar cada número aleatorio que haya creado:

lis = []
random.seed(70)
for i in range(10):
    randreal = (random.random()*5 + 30)
    lis.append(randreal)
print(lis)

o sobrescriba cada valor de la lista original con un nuevo valor aleatorio

lis = list(range(10))
random.seed(70)
for i in range(0, len(lis)):
    randreal = (random.random()*5 + 30)
    lis[i] = randreal
print(lis)

3
2017-08-26 22:21



Usted escribe:

lis = list(randreal)

Pero list(..) aquí está un constructor. El constructor busca un objeto iterable (otra lista, un conjunto, un diccionario, un generador, etc.) que puede convertir en una lista. Un punto flotante es no iterable, por lo que no puede construir una lista para eso. Por lo tanto, será un error.

Una forma de resolverlo es asignar a un índice de la lista lis:

lis = [0] * 10
random.seed(70)
for i in range(0, len(lis)):
    randreal = (random.random()*5 + 30)
    lis[yo] = randreal  # assign to an index
    print(lis)

Pero esto todavía no es muy elegante: primero construyes una lista y luego la modificas. Puedes mejorar el código dibujando 10 elementos y cada vez .append(..) a la lista:

lis = []
random.seed(70)
for i in range(0,10):
    randreal = (random.random()*5 + 30)
    lis.adjuntar(randreal)  # append to the list
    print(lis)

Esto ya es mejor, pero aún así es mucho código, así que podemos usar lista de comprensión para hacerlo más declarativo:

random.seed(70)
lis = [random.random () * 5 + 30 para _ en rango (10)]
print(lis)

6
2017-08-26 22:17