เลือก 50 รายการจากรายการแบบสุ่มเพื่อเขียนลงไฟล์


130

จนถึงตอนนี้ฉันได้หาวิธีนำเข้าไฟล์สร้างไฟล์ใหม่และสุ่มรายการแล้ว

ฉันมีปัญหาในการเลือกเพียง 50 รายการจากรายการแบบสุ่มเพื่อเขียนลงไฟล์?

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

ดังนั้นหากไฟล์การสุ่มทั้งหมดคือ

example:

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

ฉันต้องการ 3 ไฟล์ (out_file1 | 2 | 3) โดยสุ่มชุดแรกเป็น 3, สุ่มชุดที่สองของ 3 และสุ่มชุดที่สามของ 3 (สำหรับตัวอย่างนี้ แต่ไฟล์ที่ฉันต้องการสร้างควรมี 50)

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

ดังนั้นจะไม่รวม '4' สุดท้ายซึ่งก็ใช้ได้

ฉันจะเลือก 50 จากรายการที่ฉันสุ่มได้อย่างไร

ยิ่งไปกว่านั้นฉันจะสุ่มเลือก 50 รายการจากรายการเดิมได้อย่างไร


คุณหมายถึงอะไร?
O.rka

คำตอบ:


271

หากรายการอยู่ในลำดับสุ่มคุณสามารถเลือก 50 คนแรกได้

มิฉะนั้นให้ใช้

import random
random.sample(the_list, 50)

random.sample ข้อความช่วยเหลือ:

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
ฉันสามารถrandom.sampleส่งคืนดัชนีที่เลือกได้หรือไม่
zyy

43

วิธีง่ายๆอย่างหนึ่งในการเลือกไอเทมแบบสุ่มคือการสุ่มแล้วหั่น

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

@MonicaHeddneck ทำไมสุ่มสับและหั่นจะดีกว่า? การเลือกตัวอย่างจำนวนหนึ่งโดยการสุ่มการเลือกนั้นมีข้อดีเช่นเดียวกับการสุ่มแบบสุ่มจากนั้นจึงนำตัวอย่างที่สับเป็นชิ้น ๆ หรือไม่? คุณช่วยอธิบายได้ไหม? ขอบคุณ
salvu

7
ฉันใช้สิ่งนี้เพื่อสร้างชุดทดสอบ / ฝึกอบรมสำหรับโครงการแมชชีนเลิร์นนิงได้อย่างง่ายดาย การใช้random.choice(mylist,3)จะไม่สร้างสองชุดที่ไม่ปะติดปะต่อกันเช่นนี้
Monica Heddneck

29

ผมคิดว่าrandom.choice()เป็นตัวเลือกที่ดีกว่า

import numpy as np

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

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

ฟังก์ชันจะส่งคืนอาร์เรย์ของค่าที่สุ่มเลือก 3 ค่าจากรายการ


7
ฉันคิดว่าคุณต้องใช้random.choice(mylist, 3, replace=False). ยังสับสนน้อยกว่าในการใช้งานimport numpy as npและnp.random.choice(mylist, 3, replace=False)
John La Rooy

10
นี่เป็นโอกาสที่จะทำซ้ำรายการ
Paullo

ไม่นี่ไม่ใช่ทางเลือกที่ดีกว่ามันช้ากว่า ~ 100 เท่า
nitesh kansal

-3

สมมติว่ารายการของคุณมี 100 องค์ประกอบและคุณต้องการเลือก 50 รายการด้วยวิธีการสุ่ม ขั้นตอนดังต่อไปนี้:

  1. นำเข้าไลบรารี
  2. สร้างเมล็ดพันธุ์สำหรับเครื่องกำเนิดตัวเลขสุ่มฉันวางไว้ที่ 2
  3. เตรียมรายการตัวเลขที่จะหยิบขึ้นมาด้วยวิธีการสุ่ม
  4. เลือกตัวเลือกแบบสุ่มจากรายการตัวเลข

รหัส:

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.