Wählen Sie zufällig 50 Elemente aus der Liste aus, um sie in die Datei zu schreiben

129

Bisher habe ich herausgefunden, wie man die Datei importiert, neue Dateien erstellt und die Liste zufällig sortiert.

Ich habe Probleme, nur 50 Elemente aus der Liste zufällig auszuwählen, um sie in eine Datei zu schreiben.

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

Also wenn die gesamte Randomisierungsdatei war

example:

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

Ich möchte 3 Dateien (out_file1 | 2 | 3) mit der ersten zufälligen Menge von 3, der zweiten zufälligen Menge von 3 und der dritten zufälligen Menge von 3 (für dieses Beispiel sollte diejenige, die ich erstellen möchte, 50 haben).

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

Die letzte '4' wird also nicht enthalten sein, was in Ordnung ist.

Wie kann ich 50 aus der Liste auswählen, die ich zufällig ausgewählt habe?

Noch besser, wie könnte ich zufällig 50 aus der ursprünglichen Liste auswählen?

O.rka
quelle
Was meinst du?
O.rka

Antworten:

268

Wenn die Liste in zufälliger Reihenfolge ist, können Sie einfach die ersten 50 nehmen.

Andernfalls verwenden Sie

import random
random.sample(the_list, 50)

random.sample Hilfstext:

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
quelle
1
Kann ich random.sampleauch die ausgewählten Indizes zurückgeben?
Zyy
43

Eine einfache Möglichkeit, zufällige Elemente auszuwählen, besteht darin, sie zu mischen und dann in Scheiben zu schneiden.

import random
a = [1,2,3,4,5,6,7,8,9]
random.shuffle(a)
print a[:4] # prints 4 random variables
Mani
quelle
@MonicaHeddneck Warum sollte zufälliges Mischen und Schneiden besser sein? Würde die Auswahl einer Anzahl von Stichproben durch Zufälligkeit der Auswahl nicht die gleichen Vorteile haben wie das zufällige Mischen und anschließende Entnehmen eines Teils der gemischten Stichproben? Kannst du bitte Erklären? Vielen Dank.
Salvu
7
Ich habe dies verwendet, um einfach ein Test- / Zugset für ein maschinelles Lernprojekt zu erstellen. Die Verwendung random.choice(mylist,3)würde nicht zwei disjunkte Mengen erzeugen, wie dies der Fall war.
Monica Heddneck
29

Ich denke, random.choice()ist eine bessere Option.

import numpy as np

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

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

Die Funktion gibt ein Array von 3 zufällig ausgewählten Werten aus der Liste zurück

Moeen MH
quelle
7
Ich denke, Sie müssen verwenden random.choice(mylist, 3, replace=False). Auch weniger verwirrend zu bedienen import numpy as npundnp.random.choice(mylist, 3, replace=False)
John La Rooy
10
Dies hat Chancen, den Listeneintrag zu wiederholen
Paullo
Nein, dies ist keine bessere Option, es ist ~ 100-mal langsamer
Nitesh Kansal
-3

Angenommen, Ihre Liste enthält 100 Elemente und Sie möchten 50 davon zufällig auswählen. Hier sind die folgenden Schritte:

  1. Importieren Sie die Bibliotheken
  2. Erstellen Sie den Startwert für den Zufallszahlengenerator, ich habe ihn auf 2 gesetzt
  3. Bereiten Sie eine Liste mit Zahlen vor, aus denen Sie zufällig auswählen können
  4. Treffen Sie die zufällige Auswahl aus der Zahlenliste

Code:

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
quelle