Сравните, если каждый элемент списка больше, чем все остальные элементы - PullRequest
1 голос
/ 11 мая 2019

Я хочу сравнить, если один элемент списка больше, чем любой другой элемент (то же самое для каждого другого элемента). Если один элемент больше, чем другой, он получает 1. Сумма 1 (в зависимости от числа выигранных сравнений) должна храниться таким образом, чтобы я знал, сколько сравнений будет для каждого указанного элемента списка. ,

Чтобы уточнить каждый элемент в списке будет человек с идентификатором

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 с в первом элементе

1 Ответ

0 голосов
/ 11 мая 2019

Вот более эффективный способ, сначала отсортировав список, который делает процесс 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...