2013-03-19 10 views
45

Finora ho capito come importare il file, creare nuovi file e randomizzare la lista.Seleziona 50 elementi dalla lista a caso per scrivere nel file

Ho problemi a selezionare solo 50 elementi dall'elenco in modo casuale per scrivere in un file?

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') 

Quindi, se il file totale randomizzazione era

example: 

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

vorrei 3 file (out_file1 | 2 | 3) con la prima serie casuale di 3, seconda serie casuale di 3, e il terzo caso set di 3 (per questo esempio, ma quello che voglio creare dovrebbe avere 50)

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

Quindi l'ultima '4' non sarà incluso che va bene.

Come posso selezionare 50 dall'elenco che ho randomizzato?

Ancora meglio, come è possibile selezionare 50 a caso dall'elenco originale?

+0

cosa intendi? –

risposta

109

Se l'elenco è in ordine casuale, si può semplicemente prendere il primo 50.

In caso contrario, utilizzare

random.sample(the_list, 50) 

random.sample testo di aiuto:

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) 
+0

perfetto. grazie anche per la spiegazione –

+3

Nota che è necessario importare casualmente. 'importazione casuale' – jxn

13

penso random.choice() è un'opzione migliore.

from numpy import random 

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

random.choice(mylist,3) 

la funzione restituisce un array di 3 valori scelti a caso dall'elenco

+5

Penso che sia necessario usare' random.choice (mylist, 3, replace = False) '. Anche meno confuso da usare 'import numpy come np' e' np.random.choice (mylist, 3, replace = False) ' –

+0

Questo ha possibilità di ripetere la voce di elenco – Paullo

7

Un modo semplice per selezionare elementi casuali è di mescolare poi fetta.

import random 
a = [1,2,3,4,5,6,7,8,9] 
random.shuffle(a) 
print a[:4] # prints 4 random variables 
+0

risposta sottovalutata qui imho –

+0

@MonicaHeddneck Perché casuale mescolare e affettare è meglio? Non selezionare un numero di campioni randomizzando la selezione ha gli stessi meriti del mischiare casuale e quindi prendere una fetta dei campioni mescolati? Puoi spiegare per favore? Grazie. – salvu

+2

L'ho usato per creare facilmente un set di test/treno per un progetto di apprendimento automatico. L'uso di 'random.choice (mylist, 3)' non creerebbe due insiemi disgiunti come questo. –

Problemi correlati