Seleccione 50 elementos de la lista al azar para escribir en el archivo

129

Hasta ahora he descubierto cómo importar el archivo, crear nuevos archivos y aleatorizar la lista.

¿Tengo problemas para seleccionar solo 50 elementos de la lista al azar para escribir en un archivo?

def randomizer(input,output1='random_1.txt',output2='random_2.txt',output3='random_3.txt',output4='random_total.txt'):

#Input file 
    query=open(input,'r').read().split()
    dir,file=os.path.split(input)

    temp1 = os.path.join(dir,output1)
    temp2 = os.path.join(dir,output2)
    temp3 = os.path.join(dir,output3)
    temp4 = os.path.join(dir,output4)


    out_file4=open(temp4,'w')

    random.shuffle(query)

    for item in query:
        out_file4.write(item+'\n')   

Entonces, si el archivo de aleatorización total fue

example:

random_total = ['9','2','3','1','5','6','8','7','0','4']

Quisiera 3 archivos (out_file1 | 2 | 3) con el primer conjunto aleatorio de 3, el segundo conjunto aleatorio de 3 y el tercer conjunto aleatorio de 3 (para este ejemplo, pero el que quiero crear debería tener 50)

random_1 = ['9','2','3']
random_2 = ['1','5','6']
random_3 = ['8','7','0']

Por lo tanto, el último '4' no se incluirá, lo cual está bien.

¿Cómo puedo seleccionar 50 de la lista que asigné al azar?

Aún mejor, ¿cómo podría seleccionar 50 al azar de la lista original?

O.rka
fuente
¿Qué quieres decir?
O.rka

Respuestas:

269

Si la lista está en orden aleatorio, puede tomar los primeros 50.

De lo contrario, use

import random
random.sample(the_list, 50)

random.sample texto de ayuda:

sample(self, population, k) method of random.Random instance
    Chooses k unique random elements from a population sequence.

    Returns a new list containing elements from the population while
    leaving the original population unchanged.  The resulting list is
    in selection order so that all sub-slices will also be valid random
    samples.  This allows raffle winners (the sample) to be partitioned
    into grand prize and second place winners (the subslices).

    Members of the population need not be hashable or unique.  If the
    population contains repeats, then each occurrence is a possible
    selection in the sample.

    To choose a sample in a range of integers, use xrange as an argument.
    This is especially fast and space efficient for sampling from a
    large population:   sample(xrange(10000000), 60)
John La Rooy
fuente
1
¿Puedo random.sampledevolver también los índices que ha elegido?
zyy
43

Una manera fácil de seleccionar elementos aleatorios es barajar y luego cortar.

import random
a = [1,2,3,4,5,6,7,8,9]
random.shuffle(a)
print a[:4] # prints 4 random variables
Mani
fuente
@MonicaHeddneck ¿Por qué sería mejor mezclar y cortar aleatoriamente? ¿No seleccionar una cantidad de muestra aleatorizando la selección tiene los mismos méritos que la mezcla aleatoria y luego tomar una porción de las muestras mezcladas? ¿Puede usted explicar por favor? Gracias.
salvu
77
Utilicé esto para crear fácilmente un conjunto de prueba / tren para un proyecto de aprendizaje automático. Usar random.choice(mylist,3)no crearía dos conjuntos disjuntos como esto lo hizo.
Monica Heddneck
29

Creo que random.choice()es una mejor opción.

import numpy as np

mylist = [13,23,14,52,6,23]

np.random.choice(mylist, 3, replace=False)

la función devuelve una matriz de 3 valores elegidos al azar de la lista

Moein
fuente
77
Creo que necesitas usar random.choice(mylist, 3, replace=False). También menos confuso de usar import numpy as npynp.random.choice(mylist, 3, replace=False)
John La Rooy
10
Esto tiene posibilidades de repetir el elemento de la lista
Paullo
No, esta no es una mejor opción, es ~ 100 veces más lenta
nitesh kansal
-3

Digamos que su lista tiene 100 elementos y desea elegir 50 de ellos de forma aleatoria. Estos son los pasos a seguir:

  1. Importar las bibliotecas
  2. Crea la semilla para el generador de números aleatorios, lo puse en 2
  3. Prepare una lista de números de los cuales elegir de forma aleatoria
  4. Haga las elecciones al azar de la lista de números.

Código:

from random import seed
from random import choice

seed(2)
numbers = [i for i in range(100)]

print(numbers)

for _ in range(50):
    selection = choice(numbers)
    print(selection)
AlketCecaj
fuente