Python 查找列表中大于当前元素的所有元素

Python 查找列表中大于当前元素的所有元素,python,list,numpy,loops,indexing,Python,List,Numpy,Loops,Indexing,如果我有一个Python数组,其中所有元素都有不同的值,例如[1,4,6,2,10,3,5], 有没有办法找到列表中大于当前索引的值的总数 例如,使用上面长度为7的列表,我想得到的结果是另一个长度为7的列表,看起来像[6,3,1,5,0,4,2]。我在尝试循环列表时遇到问题(我尝试使用的代码如下) 其中,data是包含所有相关值的数组,N是与数据长度相同的np.zero列表,我的建议如下: 我们对原始列表(l)进行排序,并将其保存在新列表m中。我们创建一个新的列表(k),其中保存在m中每个元素位

如果我有一个Python数组,其中所有元素都有不同的值,例如
[1,4,6,2,10,3,5]
, 有没有办法找到列表中大于当前索引的值的总数

例如,使用上面长度为7的列表,我想得到的结果是另一个长度为7的列表,看起来像
[6,3,1,5,0,4,2]
。我在尝试循环列表时遇到问题(我尝试使用的代码如下)

其中,
data
是包含所有相关值的数组,
N
是与数据长度相同的
np.zero
列表,我的建议如下:

我们对原始列表(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]

你很接近<数据中的code>fori迭代每个元素,而不是Java/C中的索引

改用
范围(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()
,它返回成对(索引、元素)的迭代器

像这样的

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)
编辑
”\_(ツ)_/“
(查看大于当前元素的元素总数)

输出-

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

或者,您也可以使用
矢量化来执行此操作,如下所示:

>>> 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])

您需要精确:您使用的是S列表还是numpy数组?我相信这会发现列表中的所有值都小于列表的长度?我不确定这是否正是我想要的(因为我希望看到元素总数大于当前元素,然后循环)不过还是要谢谢你!哦,对不起,我没听清楚)我会更新我的代码不要在这样的循环中使用
.index
,使用
枚举
来迭代索引和值,或者见鬼,甚至自己手动跟踪索引。@juanpa.arrivillaga啊,好主意。修正。
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 ;)
>>> 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])