【问题标题】:Finding all elements greater than current element in a list查找列表中大于当前元素的所有元素
【发布时间】:2021-03-24 22:04:47
【问题描述】:

如果我在 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 数组?

标签: python list numpy loops indexing


【解决方案1】:

你们很亲密。 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 啊,是的,好电话。已修改。
【解决方案2】:

这是我的建议:

我们对原始列表 (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 来迭代索引和值,或者哎呀,甚至只是自己手动跟踪索引。
【解决方案3】:

这样的?

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)

EDIT ¯\_(ツ)_/¯(查看大于当前元素的元素总数)

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

【讨论】:

  • 我相信这会发现列表中的所有值都小于列表的长度?我不确定这正是我想要的(因为我想查看大于当前元素的元素总数,然后循环)但无论如何谢谢!
  • 哦,对不起,我没听懂)我会更新我的代码
【解决方案4】:

或者,您可以使用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])

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多