Выберите 50 элементов из списка в случайном порядке, чтобы записать в файл
До сих пор я выяснил, как импортировать файл, создавать новые файлы и рандомизировать список.
У меня возникли проблемы с выбором только 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 случайно из исходного списка?
Ответы
Ответ 1
Если список находится в случайном порядке, вы можете просто взять первые 50.
В противном случае используйте
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)
Ответ 2
Я думаю, что random.choice()
- лучший вариант.
from numpy import random
mylist = [13,23,14,52,6,23]
random.choice(mylist,3)
функция возвращает массив из 3 случайно выбранных значений из списка
Ответ 3
Один простой способ выбора случайных элементов - это перетасовать, а затем срез.
import random
a = [1,2,3,4,5,6,7,8,9]
random.shuffle(a)
print a[:4] # prints 4 random variables