比较列表的每个元素是否更大,则其他所有元素



我想比较列表中的元素是否大于其他元素(对于其他每个元素相同(。如果一个元素大于另一个元素,则会获得1。1s的总和(取决于比较的数量" won"(应该以一种方式存储,以便让我知道列表中每个特定元素的比较wow有多少个比较。

澄清列表的每个元素都是一个具有ID

的个人

python

#Here I create 10 random values which I call individual with the random
#funcion plus mean and standard deviation
a, b = 3, 10
mu, sigma = 5.6, 2
dist = stats.truncnorm((a - mu) / sigma, (b - mu) / sigma, loc=mu,  scale=sigma)
individuals = dist.rvs(10)
#Initialize the list where I want to store the 1s
outcome = num.zeros(n)
#Trying to loop through all the elements
for k in range(0, n):
    for j in range(0, n):
        if individuals[k] == individuals[j]:
            continue
        elif individuals[k] < individuals[j]:
            continue
        elif individuals[k] > individuals[j]:
             outcome[i] += 1
    return outcome[i]

我最终有一个单一值的结果。大概是在第一个元素中每1个总结

这是一种更有效的方法,首先对列表进行排序,这使得o(n*log(n((而不是o(n ** 2(。

我们对列表进行排序,保留每个值的原始索引(这是O(n*log(n((。

然后,我们遍布列表以设置输出计数,这是排序列表中值的索引,除了重复项外 - 在这种情况下,我们只能跟踪相同的值数量以进行调整。结果。

def larger_than(values):
    ordered_values = sorted((value, index) for index, value in enumerate(values))
    out = [None] * len(values)
    # take care of equal values
    equals = 0
    prev = None
    for rank, (value, index) in enumerate(ordered_values):
        if value == prev:
            equals += 1
        else:
            equals = 0
            prev = value
        out[index] = rank - equals
    return out

一些测试:

values = [1, 4, 3, 3, 10, 1, 5, 2, 7, 6]
print(larger_than(values))
# [0, 5, 3, 3, 9, 0, 6, 2, 8, 7]

相关内容

  • 没有找到相关文章

最新更新