Поиск всех элементов больше, чем текущий элемент в списке

Если у меня есть массив в Python, в котором все элементы имеют разные значения, например. [1,4,6,2,10,3,5], есть ли способ найти общее количество значений в списке, которые больше, чем текущий индекс?

Так, например, используя приведенный выше список длины 7, результат, который я хотел бы получить, — это другой список длины 7, который выглядит как [6,3,1,5,0,4,2]. У меня возникли проблемы с прокруткой списка (код, который я пытался использовать, приведен ниже)

for i in data:
    count = np.sum(data > data[i])
    N[i]=count

где data — массив, содержащий все соответствующие значения, а N — список np.zeros той же длины, что и данные

Вам нужно быть точным: вы работаете со списками или с массивами numpy?

juanpa.arrivillaga 14.12.2020 10:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 432
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вот мое предложение:

Сортируем исходный список (l) и сохраняем его в новый список m. Мы создаем новый список (k), в котором мы сохраняем количество элементов, которые находятся справа от позиции каждого элемента в m. См. ниже:

l=[1,4,6,2,10,3,5]

m=sorted(l)
#[1, 2, 3, 4, 5, 6, 10]

k=[]
for i in l:
    k.append(len(m)-m.index(i)-1)

>>> print(k)

[6, 3, 1, 5, 0, 4, 2]

Не используйте .index в таком цикле, используйте enumerate для перебора индекса и значения, или, черт возьми, даже просто вручную отслеживайте индекс самостоятельно.

juanpa.arrivillaga 15.12.2020 00:02
Ответ принят как подходящий

Вы были очень близки. for i in data перебирает каждый элемент, а не индексы, как в Java/C.

Вместо этого используйте range(len(data)).

import numpy as np

data = np.array([1,4,6,2,10,3,5])
out = np.array([0]*7)

for i in range(len(data)):
    count = np.sum(data > data[i])
    out[i] = count

print(out)  # [6 3 1 5 0 4 2]

Другой способ написать цикл — использовать enumerate(), который возвращает итератор пар (индексов, элементов).

for i, x in enumerate(data):
    count = np.sum(data > x)
    out[i] = count

@juanpa.arrivillaga Ах да, хороший звонок. Изменено.

TrebledJ 15.12.2020 05:00

Что-то вроде этого?

list = [1,4,6,2,10,3,5]
list2 = []
v = len(list)
for x in list:
    if x > v:
        pass
    else:
        list2.append(x)

print(list2)

РЕДАКТИРОВАТЬ ¯\_(ツ)_/¯ (Чтобы увидеть общее количество элементов больше, чем текущий элемент)

list = [1,4,6,2,10,3,5]
list2 = []
v = len(list)
total = 0

for x in list:
    if x > v:
        pass
    else:
        list2.append(x)

for y in list2:
    total += 1

list2 = str(list2).replace('[', '')
list2 = list2.replace(']', '')

print("Now - " + list2 + ", in total of " + str(total) + " numbers ;)")

Выход -

Now - 1, 4, 6, 2, 3, 5, in total of 6 numbers ;)

Я полагаю, что это находит все значения в списке меньше, чем длина списка? Я не уверен, что это именно то, что я искал (поскольку я хотел увидеть общее количество элементов больше, чем текущий элемент, а затем выполнить цикл), но все равно спасибо!

Akshay 14.12.2020 11:05

Ой, извините, я не уловил) я обновлю свой код

user14023416 14.12.2020 12:14

Кроме того, вы можете сделать это, используя vectorize следующим образом:

>>> data = np.array( [1,4,6,2,10,3,5] )
>>> np.vectorize(lambda a, b : np.sum(a>b), excluded = [0] )(data, data)
array([6, 3, 1, 5, 0, 4, 2])

Другие вопросы по теме