Chọn 50 mục từ danh sách ngẫu nhiên để ghi vào tệp


129

Cho đến nay tôi đã tìm ra cách nhập tệp, tạo tệp mới và chọn ngẫu nhiên danh sách.

Tôi gặp sự cố khi chỉ chọn ngẫu nhiên 50 mục từ danh sách để ghi vào tệp?

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

Vì vậy, nếu tổng số tập tin ngẫu nhiên là

example:

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

Tôi muốn có 3 tệp (out_file1 | 2 | 3) với bộ ngẫu nhiên đầu tiên là 3, bộ ngẫu nhiên thứ hai là 3 và bộ 3 ngẫu nhiên thứ ba (ví dụ này, nhưng tệp tôi muốn tạo nên có 50)

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

Vì vậy, '4' cuối cùng sẽ không được bao gồm là tốt.

Làm cách nào tôi có thể chọn 50 từ danh sách mà tôi chọn ngẫu nhiên?

Thậm chí tốt hơn, làm thế nào tôi có thể chọn ngẫu nhiên 50 từ danh sách ban đầu?


Ý anh là gì?
O.rka

Câu trả lời:


269

Nếu danh sách theo thứ tự ngẫu nhiên, bạn chỉ cần lấy 50 đầu tiên.

Nếu không, sử dụng

import random
random.sample(the_list, 50)

random.sample văn bản trợ giúp:

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
Tôi có thể random.sampletrả lại các chỉ số mà nó đã chọn không?
zyy

43

Một cách dễ dàng để chọn các mục ngẫu nhiên là xáo trộn sau đó cắt lát.

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

@MonicaHeddneck Tại sao việc xáo trộn ngẫu nhiên và cắt lát sẽ tốt hơn? Sẽ không chọn một số mẫu bằng cách chọn ngẫu nhiên lựa chọn có cùng giá trị như xáo trộn ngẫu nhiên và sau đó lấy một lát của các mẫu được xáo trộn? Bạn có thể giải thích dùm không? Cảm ơn.
salvu

7
Tôi đã sử dụng điều này để dễ dàng tạo ra một bộ kiểm tra / đào tạo cho một dự án máy học. Sử dụng random.choice(mylist,3)sẽ không tạo ra hai bộ khác nhau như điều này đã làm.
Monica Heddneck

29

Tôi nghĩ random.choice()là một lựa chọn tốt hơn.

import numpy as np

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

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

hàm trả về một mảng gồm 3 giá trị được chọn ngẫu nhiên từ danh sách


7
Tôi nghĩ bạn cần sử dụng random.choice(mylist, 3, replace=False). Cũng ít gây nhầm lẫn khi sử dụng import numpy as npnp.random.choice(mylist, 3, replace=False)
John La Rooy

10
Điều này có cơ hội lặp lại mục danh sách
Paullo

Không, đây không phải là một lựa chọn tốt hơn, nó chậm hơn ~ 100 lần
nitesh kansal

-3

Giả sử danh sách của bạn có 100 yếu tố và bạn muốn chọn 50 trong số đó một cách ngẫu nhiên. Dưới đây là các bước để làm theo:

  1. Nhập thư viện
  2. Tạo hạt giống cho trình tạo số ngẫu nhiên, tôi đã đặt nó ở mức 2
  3. Chuẩn bị một danh sách các số để nhận một cách ngẫu nhiên
  4. Thực hiện các lựa chọn ngẫu nhiên từ danh sách số

Mã số:

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.