Я ожидаю очень медленной работы с алгоритмом ниже. У меня очень большой (1.000.000+) список, содержащий большие строки.Python очень медленная случайная выборка по большому списку
т.е. id_list = ['MYSUPERLARGEID:1123:123123', 'MYSUPERLARGEID:1123:134534389', 'MYSUPERLARGEID:1123:12763']...
num_reads
является максимальное число элементов для случайного выбора из этого списка. Идея состоит в том, чтобы случайно выбрать один из идентификаторов строки в id_list
до тех пор, пока не будет достигнут num_reads
и добавим (скажем, добавьте, а не добавьте, потому что я не забочусь о random_id_list
порядке) их в random_id_list
, который пуст в начале.
Я не могу повторить один и тот же идентификатор, поэтому я удаляю его из исходного списка после того, как его выбрали рандони. Я подозреваю, что это то, что делает скрипт очень медленным. Возможно, я ошибаюсь, и это еще одна часть этого цикла, ответственная за медленное поведение.
for x in xrange(0, num_reads):
id_index, id_string = random.choice(list(enumerate(id_list)))
random_id_list.append(id_string)
del read_id_list[id_index]
Удивительно. Я не очень разбирался в случайной выборке в Python. Вы просто сделали мой день. Спасибо, сэр ! – gmarco
Для моей проблемы Этого достаточно с одной случайной выборкой. Но всегда хорошо знать, как создавать несколько случайных выборок без повторяющихся элементов. – gmarco