Python random.sample прекратить выборку после всех возможных результатов - PullRequest
1 голос
/ 10 августа 2011

Я использую random.sample для выборки всех возможных комбинаций наборов данных (около 150 наборов). Размеры выборки, которые я буду тестировать, составляют 3,4 и 5, а наборы данных варьируются от 2 до 20 элементов.

Каждая точка данных будет строкой, например, «101А». Я собирался просто зациклить случайную выборку 1000 раз и сохранить точки в виде упорядоченной каскадной строки, чтобы исключить дубликаты. например,

d['2-101a-124'] = 0 

Затем, чтобы извлечь данные, затем разделить данные на '-s. Есть ли лучший способ сделать это? Ограничение количества случайных выборок для получения всех комбинаций?

edit: просто для пояснения мне нужны все возможные комбинации списка, т.е.

dataset = ['1','2','3A','4']

при выборке 3 точек данных мне нужна вся комбинация, как в:

combination 1 = ['1','2','3A']
combination 2 = ['2','3A','4']
combination 3 = ['1','3A','4']
combination 4 = ['1','2','4']

Ответы [ 2 ]

5 голосов
/ 10 августа 2011

С неиспользуемой стандартной библиотекой?

>>> import itertools
>>> dataset = ['1','2','3A','4']
>>> list(itertools.combinations(dataset, 3))
[('1', '2', '3A'), ('1', '2', '4'), ('1', '3A', '4'), ('2', '3A', '4')]
0 голосов
/ 10 августа 2011

Если вы можете перечислить все комбинации и поместить их в список

a = [ list of all combinations ]

Затем вы можете shuffle разместить их в случайном порядке

random.shuffle(a)

Таким образом, у вас будет ровно 1 каждый из оригинала. Я не уверен на 100%, что преследую цель, хотя, возможно, это не то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...