Задача самая обычная, и возникает достаточно часто - получить случайную последовательность, случайной длинны из какого-либо набора данных. Например, 5-10 кейвордов из списка кеев в несколько тысяч, или выбор последовательности действия для бота имитирующего поведение человека. В простейшем варианте - все элементарно :
import random data = ['add_friends', 'post_story', 'vote', 'comment'] chain = random.sample(data, 2)
Тааак, а если хочется задать вероятность наступления события?
import random def get_random_chain(chain, min_max=[1,1]): '''Get random chain from list chain - target list min_max - result chain length (from-to) ''' items_chain = [] random.seed() for item, num in chain.iteritems(): items_chain.extend([item] * num) random.shuffle(items_chain) chain_len = random.randint(min_max[0], min_max[1]) return random.sample(items_chain, chain_len)
Использовать можно следующим образом (исходная последовательность задается в виде словаря key : value - где value вероятность наступления события) :
ACTIONS = { "post" : 20, "vote" : 80 } # Получить случайную цепочку действий длинной в данном случае от 5 до 10 элементов. what_to_do = get_random_chain(ACTIONS, [5,10])
Обратите внимание, длинна результата может быть сколь угодно длинной и превышать исходную последовательность. Однако алгоритм далеко не оптимален и не подойдет для работы с большим объемом исходных данных.