Seleziona 50 voci dall'elenco a caso per scrivere sul file


129

Finora ho capito come importare il file, creare nuovi file e randomizzare l'elenco.

Ho problemi a selezionare casualmente solo 50 voci dall'elenco per scrivere su 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 di randomizzazione totale fosse

example:

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

Vorrei 3 file (out_file1 | 2 | 3) con il primo set casuale di 3, il secondo set casuale di 3 e il terzo set casuale 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 gli ultimi '4' non saranno inclusi, il che va bene.

Come posso selezionare 50 dall'elenco che ho randomizzato?

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


cosa intendi?
O.rka,

Risposte:


269

Se l'elenco è in ordine casuale, puoi semplicemente prendere i primi 50.

Altrimenti, usa

import random
random.sample(the_list, 50)

random.sample Testo guida:

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)

1
Posso random.samplerestituire anche gli indici che ha scelto?
zyy

43

Un modo semplice per selezionare elementi casuali è mescolare e tagliare.

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

@MonicaHeddneck Perché mescolare e tagliare casualmente sarebbe meglio? La selezione di un numero di campioni randomizzando la selezione avrebbe gli stessi meriti del mescolamento casuale e quindi prendendo una fetta dei campioni mescolati? Puoi spiegare per favore? Grazie.
salvu,

7
L'ho usato per creare facilmente un set di test / training per un progetto di apprendimento automatico. L'uso random.choice(mylist,3)non creerebbe due insiemi disgiunti come in questo caso.
Monica Heddneck,

29

Penso che random.choice()sia un'opzione migliore.

import numpy as np

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

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

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


7
Penso che tu debba usare random.choice(mylist, 3, replace=False). Anche meno confuso da usare import numpy as npenp.random.choice(mylist, 3, replace=False)
John La Rooy,

10
Questo ha possibilità di ripetere l'elemento dell'elenco
Paullo,

No, questa non è un'opzione migliore, è ~ 100 volte più lenta
nitesh kansal il

-3

Supponiamo che il tuo elenco contenga 100 elementi e che tu voglia sceglierne 50 in modo casuale. Ecco i passaggi da seguire:

  1. Importa le librerie
  2. Crea il seme per il generatore di numeri casuali, l'ho messo a 2
  3. Prepara un elenco di numeri da cui prelevare in modo casuale
  4. Fai le scelte casuali dall'elenco dei numeri

Codice:

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.