如何从给定的固定几何系列中创建Python中的N个数字列表?

时间:2016-02-02 00:45:06

标签: python python-2.7 python-3.x

我有一个固定的几何序列号,范围从1到64 (1,2,4,8,16,32,64),我需要从它们中创建一个N个数字的随机列表 - 每个数字和另一个列表的重复比例相等比例不平等。

我应该怎样做才能首先创建N个数字列表?到目前为止,我已经编写了以下代码 - 考虑N = 21

# When N = 21
import random

population = [1,1,1,2,2,2,4,4,4,8,8,8,16,16,16,32,32,32,64,64,64]


def sample_wr(population, k):
    # "Chooses k random elements (with replacement) from a population"

    n = len(population)
    _random, _int = random.random, int  # speed hack 
        result = [None] * k
        for i in xrange(k):
            j = _int(_random() * n)
            result[i] = population[j]
        return result


Random_Sample = sample_wr(population, 21)
print(Random_Sample)

2 个答案:

答案 0 :(得分:0)

好吧,您可以将“比例代表”代码简化为

from random import choice

def sample_wr(population, k):
    return [choice(population) for _ in range(k)]

如果你想要不相等的比例,你必须定义你想要的比例。

答案 1 :(得分:0)

首先,我会使用shuffle

def balancedsample(population, k):
    population = (population * math.ceil(k/len(population)))[:k]
    random.shuffle(population)
    return population

这只是根据需要多次乘以填充列表以获取足够的元素,如果k不是len(population)的完美倍数则截断,并将结果混洗。

对于第二个,我会按照Hugh suggests的方式进行。