Selecione 50 itens da lista aleatoriamente para gravar no arquivo

129

Até agora, descobri como importar o arquivo, criar novos arquivos e randomizar a lista.

Estou tendo problemas para selecionar aleatoriamente apenas 50 itens da lista para gravar em um arquivo?

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

Portanto, se o arquivo de randomização total fosse

example:

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

Eu gostaria de 3 arquivos (out_file1 | 2 | 3) com o primeiro conjunto aleatório de 3, o segundo conjunto aleatório de 3 e o terceiro conjunto aleatório de 3 (neste exemplo, mas o que eu quero criar deve ter 50)

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

Portanto, o último '4' não será incluído, o que é bom.

Como posso selecionar 50 da lista que selecionei aleatoriamente?

Ainda melhor, como eu poderia selecionar 50 aleatoriamente da lista original?

O.rka
fonte
O que você quer dizer?
O.rka

Respostas:

269

Se a lista estiver em ordem aleatória, você pode apenas pegar os 50 primeiros.

Caso contrário, use

import random
random.sample(the_list, 50)

random.sample Texto de ajuda:

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
fonte
1
Posso random.sampledevolver também os índices que ele escolheu?
zyy 30/03
43

Uma maneira fácil de selecionar itens aleatórios é embaralhar e fatiar.

import random
a = [1,2,3,4,5,6,7,8,9]
random.shuffle(a)
print a[:4] # prints 4 random variables
Mani
fonte
@MonicaHeddneck Por que baralhar aleatoriamente e fatiar seria melhor? Selecionar um número de amostras aleatoriamente não teria os mesmos méritos que o embaralhamento aleatório e, em seguida, coletar uma fatia das amostras embaralhadas? Você pode explicar, por favor? Obrigado.
Salvev 28/07
7
Usei isso para criar facilmente um conjunto de teste / trem para um projeto de aprendizado de máquina. O uso random.choice(mylist,3)não criaria dois conjuntos disjuntos como esse.
Monica Heddneck 31/07
29

Eu acho que random.choice()é uma opção melhor.

import numpy as np

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

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

a função retorna uma matriz de 3 valores escolhidos aleatoriamente da lista

Moein
fonte
7
Eu acho que você precisa usar random.choice(mylist, 3, replace=False). Também menos confuso de usar import numpy as npenp.random.choice(mylist, 3, replace=False)
John La Rooy 24/10
10
Isso tem chances de repetir o item da lista
Paullo 10/02
Não, esta não é uma opção melhor, é ~ 100 vezes mais lenta
nitesh kansal 13/01
-3

Digamos que sua lista tenha 100 elementos e você queira escolher 50 deles de maneira aleatória. Aqui estão as etapas a seguir:

  1. Importar as bibliotecas
  2. Crie a semente para o gerador de números aleatórios, coloquei em 2
  3. Prepare uma lista de números para escolher aleatoriamente
  4. Faça as escolhas aleatórias da 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
fonte