Python вопрос.Я генерирую большой массив объектов, которые мне нужны только для небольшой случайной выборки.На самом деле генерация рассматриваемых объектов занимает некоторое время, поэтому я задаюсь вопросом, можно ли было бы как-то пропустить те объекты, которые не нужно генерировать, и только явно создать те объекты, которые были отобраны.
Другими словамиТеперь у меня есть
a = createHugeArray()
s = random.sample(a,len(a)*0.001)
, что довольно расточительно.Я предпочел бы что-нибудь более ленивое, как
a = createArrayGenerator()
s = random.sample(a,len(a)*0.001)
Я не знаю, работает ли это.Документация по random.sample не слишком ясна, хотя в ней упоминается, что xrange очень быстр, что заставляет меня верить, что это может сработать.Преобразование создания массива в генератор было бы небольшой работой (мои знания о генераторах очень ржавые), поэтому я хочу знать, работает ли это заранее.:)
Альтернатива, которую я вижу, состоит в том, чтобы сделать случайную выборку с помощью xrange и генерировать только те объекты, которые фактически выбраны по индексу.Это не очень понятно, потому что сгенерированные индексы являются произвольными и ненужными, и мне потребуется довольно хакерская логика для поддержки этого в моем методе generateHugeArray.
Для бонусных баллов: как на самом деле работает random.sample?Особенно, как это работает, если он не знает заранее численность населения, как с такими генераторами, как xrange?